home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / nsspki.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  59KB  |  3,196 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Netscape security libraries.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36.  
  37. #ifndef NSSPKI_H
  38. #define NSSPKI_H
  39.  
  40. #ifdef DEBUG
  41. static const char NSSPKI_CVS_ID[] = "@(#) $RCSfile: nsspki.h,v $ $Revision: 1.10 $ $Date: 2005/01/20 02:25:49 $";
  42. #endif /* DEBUG */
  43.  
  44. /*
  45.  * nsspki.h
  46.  *
  47.  * This file prototypes the methods of the top-level PKI objects.
  48.  */
  49.  
  50. #ifndef NSSDEVT_H
  51. #include "nssdevt.h"
  52. #endif /* NSSDEVT_H */
  53.  
  54. #ifndef NSSPKIT_H
  55. #include "nsspkit.h"
  56. #endif /* NSSPKIT_H */
  57.  
  58. #ifndef NSSPKI1_H
  59. #include "nsspki1.h"
  60. #endif /* NSSPKI1_H */
  61.  
  62. #ifndef BASE_H
  63. #include "base.h"
  64. #endif /* BASE_H */
  65.  
  66. PR_BEGIN_EXTERN_C
  67.  
  68. /*
  69.  * A note about interfaces
  70.  *
  71.  * Although these APIs are specified in C, a language which does
  72.  * not have fancy support for abstract interfaces, this library
  73.  * was designed from an object-oriented perspective.  It may be
  74.  * useful to consider the standard interfaces which went into
  75.  * the writing of these APIs.
  76.  *
  77.  * Basic operations on all objects:
  78.  *  Destroy -- free a pointer to an object
  79.  *  DeleteStoredObject -- delete an object permanently
  80.  *
  81.  * Public Key cryptographic operations:
  82.  *  Encrypt
  83.  *  Verify
  84.  *  VerifyRecover
  85.  *  Wrap
  86.  *  Derive
  87.  *
  88.  * Private Key cryptographic operations:
  89.  *  IsStillPresent
  90.  *  Decrypt
  91.  *  Sign
  92.  *  SignRecover
  93.  *  Unwrap
  94.  *  Derive
  95.  *
  96.  * Symmetric Key cryptographic operations:
  97.  *  IsStillPresent
  98.  *  Encrypt
  99.  *  Decrypt
  100.  *  Sign
  101.  *  SignRecover
  102.  *  Verify
  103.  *  VerifyRecover
  104.  *  Wrap
  105.  *  Unwrap
  106.  *  Derive
  107.  *
  108.  */
  109.  
  110. /*
  111.  * NSSCertificate
  112.  *
  113.  * These things can do crypto ops like public keys, except that the trust, 
  114.  * usage, and other constraints are checked.  These objects are "high-level,"
  115.  * so trust, usages, etc. are in the form we throw around (client auth,
  116.  * email signing, etc.).  Remember that theoretically another implementation
  117.  * (think PGP) could be beneath this object.
  118.  */
  119.  
  120. /*
  121.  * NSSCertificate_Destroy
  122.  *
  123.  * Free a pointer to a certificate object.
  124.  */
  125.  
  126. NSS_EXTERN PRStatus
  127. NSSCertificate_Destroy
  128. (
  129.   NSSCertificate *c
  130. );
  131.  
  132. /*
  133.  * NSSCertificate_DeleteStoredObject
  134.  *
  135.  * Permanently remove this certificate from storage.  If this is the
  136.  * only (remaining) certificate corresponding to a private key, 
  137.  * public key, and/or other object; then that object (those objects)
  138.  * are deleted too.
  139.  */
  140.  
  141. NSS_EXTERN PRStatus
  142. NSSCertificate_DeleteStoredObject
  143. (
  144.   NSSCertificate *c,
  145.   NSSCallback *uhh
  146. );
  147.  
  148. /*
  149.  * NSSCertificate_Validate
  150.  *
  151.  * Verify that this certificate is trusted, for the specified usage(s), 
  152.  * at the specified time, {word word} the specified policies.
  153.  */
  154.  
  155. NSS_EXTERN PRStatus
  156. NSSCertificate_Validate
  157. (
  158.   NSSCertificate *c,
  159.   NSSTime *timeOpt, /* NULL for "now" */
  160.   NSSUsage *usage,
  161.   NSSPolicies *policiesOpt /* NULL for none */
  162. );
  163.  
  164. /*
  165.  * NSSCertificate_ValidateCompletely
  166.  *
  167.  * Verify that this certificate is trusted.  The difference between
  168.  * this and the previous call is that NSSCertificate_Validate merely
  169.  * returns success or failure with an appropriate error stack.
  170.  * However, there may be (and often are) multiple problems with a
  171.  * certificate.  This routine returns an array of errors, specifying
  172.  * every problem.
  173.  */
  174.  
  175. /* 
  176.  * Return value must be an array of objects, each of which has
  177.  * an NSSError, and any corresponding certificate (in the chain)
  178.  * and/or policy.
  179.  */
  180.  
  181. NSS_EXTERN void ** /* void *[] */
  182. NSSCertificate_ValidateCompletely
  183. (
  184.   NSSCertificate *c,
  185.   NSSTime *timeOpt, /* NULL for "now" */
  186.   NSSUsage *usage,
  187.   NSSPolicies *policiesOpt, /* NULL for none */
  188.   void **rvOpt, /* NULL for allocate */
  189.   PRUint32 rvLimit, /* zero for no limit */
  190.   NSSArena *arenaOpt /* NULL for heap */
  191. );
  192.  
  193. /*
  194.  * NSSCertificate_ValidateAndDiscoverUsagesAndPolicies
  195.  *
  196.  * Returns PR_SUCCESS if the certificate is valid for at least something.
  197.  */
  198.  
  199. NSS_EXTERN PRStatus
  200. NSSCertificate_ValidateAndDiscoverUsagesAndPolicies
  201. (
  202.   NSSCertificate *c,
  203.   NSSTime **notBeforeOutOpt,
  204.   NSSTime **notAfterOutOpt,
  205.   void *allowedUsages,
  206.   void *disallowedUsages,
  207.   void *allowedPolicies,
  208.   void *disallowedPolicies,
  209.   /* more args.. work on this fgmr */
  210.   NSSArena *arenaOpt
  211. );
  212.  
  213. /*
  214.  * NSSCertificate_Encode
  215.  *
  216.  */
  217.  
  218. NSS_EXTERN NSSDER *
  219. NSSCertificate_Encode
  220. (
  221.   NSSCertificate *c,
  222.   NSSDER *rvOpt,
  223.   NSSArena *arenaOpt
  224. );
  225.  
  226. /*
  227.  * NSSCertificate_BuildChain
  228.  *
  229.  * This routine returns NSSCertificate *'s for each certificate
  230.  * in the "chain" starting from the specified one up to and
  231.  * including the root.  The zeroth element in the array is the
  232.  * specified ("leaf") certificate.
  233.  *
  234.  * If statusOpt is supplied, and is returned as PR_FAILURE, possible
  235.  * error values are:
  236.  *
  237.  * NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND - the chain is incomplete
  238.  *
  239.  */
  240.  
  241. extern const NSSError NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND;
  242.  
  243. NSS_EXTERN NSSCertificate **
  244. NSSCertificate_BuildChain
  245. (
  246.   NSSCertificate *c,
  247.   NSSTime *timeOpt,
  248.   NSSUsage *usage,
  249.   NSSPolicies *policiesOpt,
  250.   NSSCertificate **rvOpt,
  251.   PRUint32 rvLimit, /* zero for no limit */
  252.   NSSArena *arenaOpt,
  253.   PRStatus *statusOpt,
  254.   NSSTrustDomain *td,
  255.   NSSCryptoContext *cc 
  256. );
  257.  
  258. /*
  259.  * NSSCertificate_GetTrustDomain
  260.  *
  261.  */
  262.  
  263. NSS_EXTERN NSSTrustDomain *
  264. NSSCertificate_GetTrustDomain
  265. (
  266.   NSSCertificate *c
  267. );
  268.  
  269. /*
  270.  * NSSCertificate_GetToken
  271.  *
  272.  * There doesn't have to be one.
  273.  */
  274.  
  275. NSS_EXTERN NSSToken *
  276. NSSCertificate_GetToken
  277. (
  278.   NSSCertificate *c,
  279.   PRStatus *statusOpt
  280. );
  281.  
  282. /*
  283.  * NSSCertificate_GetSlot
  284.  *
  285.  * There doesn't have to be one.
  286.  */
  287.  
  288. NSS_EXTERN NSSSlot *
  289. NSSCertificate_GetSlot
  290. (
  291.   NSSCertificate *c,
  292.   PRStatus *statusOpt
  293. );
  294.  
  295. /*
  296.  * NSSCertificate_GetModule
  297.  *
  298.  * There doesn't have to be one.
  299.  */
  300.  
  301. NSS_EXTERN NSSModule *
  302. NSSCertificate_GetModule
  303. (
  304.   NSSCertificate *c,
  305.   PRStatus *statusOpt
  306. );
  307.  
  308. /*
  309.  * NSSCertificate_Encrypt
  310.  *
  311.  * Encrypt a single chunk of data with the public key corresponding to
  312.  * this certificate.
  313.  */
  314.  
  315. NSS_EXTERN NSSItem *
  316. NSSCertificate_Encrypt
  317. (
  318.   NSSCertificate *c,
  319.   NSSAlgorithmAndParameters *apOpt,
  320.   NSSItem *data,
  321.   NSSTime *timeOpt,
  322.   NSSUsage *usage,
  323.   NSSPolicies *policiesOpt,
  324.   NSSCallback *uhh,
  325.   NSSItem *rvOpt,
  326.   NSSArena *arenaOpt
  327. );
  328.  
  329. /*
  330.  * NSSCertificate_Verify
  331.  *
  332.  */
  333.  
  334. NSS_EXTERN PRStatus
  335. NSSCertificate_Verify
  336. (
  337.   NSSCertificate *c,
  338.   NSSAlgorithmAndParameters *apOpt,
  339.   NSSItem *data,
  340.   NSSItem *signature,
  341.   NSSTime *timeOpt,
  342.   NSSUsage *usage,
  343.   NSSPolicies *policiesOpt,
  344.   NSSCallback *uhh
  345. );
  346.  
  347. /*
  348.  * NSSCertificate_VerifyRecover
  349.  *
  350.  */
  351.  
  352. NSS_EXTERN NSSItem *
  353. NSSCertificate_VerifyRecover
  354. (
  355.   NSSCertificate *c,
  356.   NSSAlgorithmAndParameters *apOpt,
  357.   NSSItem *signature,
  358.   NSSTime *timeOpt,
  359.   NSSUsage *usage,
  360.   NSSPolicies *policiesOpt,
  361.   NSSCallback *uhh,
  362.   NSSItem *rvOpt,
  363.   NSSArena *arenaOpt
  364. );
  365.  
  366. /*
  367.  * NSSCertificate_WrapSymmetricKey
  368.  *
  369.  * This method tries very hard to to succeed, even in situations 
  370.  * involving sensitive keys and multiple modules.
  371.  * { relyea: want to add verbiage? }
  372.  */
  373.  
  374. NSS_EXTERN NSSItem *
  375. NSSCertificate_WrapSymmetricKey
  376. (
  377.   NSSCertificate *c,
  378.   NSSAlgorithmAndParameters *apOpt,
  379.   NSSSymmetricKey *keyToWrap,
  380.   NSSTime *timeOpt,
  381.   NSSUsage *usage,
  382.   NSSPolicies *policiesOpt,
  383.   NSSCallback *uhh,
  384.   NSSItem *rvOpt,
  385.   NSSArena *arenaOpt
  386. );
  387.  
  388. /*
  389.  * NSSCertificate_CreateCryptoContext
  390.  *
  391.  * Create a crypto context, in this certificate's trust domain, with this
  392.  * as the distinguished certificate.
  393.  */
  394.  
  395. NSS_EXTERN NSSCryptoContext *
  396. NSSCertificate_CreateCryptoContext
  397. (
  398.   NSSCertificate *c,
  399.   NSSAlgorithmAndParameters *apOpt,
  400.   NSSTime *timeOpt,
  401.   NSSUsage *usage,
  402.   NSSPolicies *policiesOpt,
  403.   NSSCallback *uhh  
  404. );
  405.  
  406. /*
  407.  * NSSCertificate_GetPublicKey
  408.  *
  409.  * Returns the public key corresponding to this certificate.
  410.  */
  411.  
  412. NSS_EXTERN NSSPublicKey *
  413. NSSCertificate_GetPublicKey
  414. (
  415.   NSSCertificate *c
  416. );
  417.  
  418. /*
  419.  * NSSCertificate_FindPrivateKey
  420.  *
  421.  * Finds and returns the private key corresponding to this certificate,
  422.  * if it is available.
  423.  *
  424.  * { Should this hang off of NSSUserCertificate? }
  425.  */
  426.  
  427. NSS_EXTERN NSSPrivateKey *
  428. NSSCertificate_FindPrivateKey
  429. (
  430.   NSSCertificate *c,
  431.   NSSCallback *uhh
  432. );
  433.  
  434. /*
  435.  * NSSCertificate_IsPrivateKeyAvailable
  436.  *
  437.  * Returns success if the private key corresponding to this certificate
  438.  * is available to be used.
  439.  *
  440.  * { Should *this* hang off of NSSUserCertificate?? }
  441.  */
  442.  
  443. NSS_EXTERN PRBool
  444. NSSCertificate_IsPrivateKeyAvailable
  445. (
  446.   NSSCertificate *c,
  447.   NSSCallback *uhh,
  448.   PRStatus *statusOpt
  449. );
  450.  
  451. /*
  452.  * If we make NSSUserCertificate not a typedef of NSSCertificate, 
  453.  * then we'll need implementations of the following:
  454.  *
  455.  *  NSSUserCertificate_Destroy
  456.  *  NSSUserCertificate_DeleteStoredObject
  457.  *  NSSUserCertificate_Validate
  458.  *  NSSUserCertificate_ValidateCompletely
  459.  *  NSSUserCertificate_ValidateAndDiscoverUsagesAndPolicies
  460.  *  NSSUserCertificate_Encode
  461.  *  NSSUserCertificate_BuildChain
  462.  *  NSSUserCertificate_GetTrustDomain
  463.  *  NSSUserCertificate_GetToken
  464.  *  NSSUserCertificate_GetSlot
  465.  *  NSSUserCertificate_GetModule
  466.  *  NSSUserCertificate_GetCryptoContext
  467.  *  NSSUserCertificate_GetPublicKey
  468.  */
  469.  
  470. /*
  471.  * NSSUserCertificate_IsStillPresent
  472.  *
  473.  * Verify that if this certificate lives on a token, that the token
  474.  * is still present and the certificate still exists.  This is a
  475.  * lightweight call which should be used whenever it should be
  476.  * verified that the user hasn't perhaps popped out his or her
  477.  * token and strolled away.
  478.  */
  479.  
  480. NSS_EXTERN PRBool
  481. NSSUserCertificate_IsStillPresent
  482. (
  483.   NSSUserCertificate *uc,
  484.   PRStatus *statusOpt
  485. );
  486.  
  487. /*
  488.  * NSSUserCertificate_Decrypt
  489.  *
  490.  * Decrypt a single chunk of data with the private key corresponding
  491.  * to this certificate.
  492.  */
  493.  
  494. NSS_EXTERN NSSItem *
  495. NSSUserCertificate_Decrypt
  496. (
  497.   NSSUserCertificate *uc,
  498.   NSSAlgorithmAndParameters *apOpt,
  499.   NSSItem *data,
  500.   NSSTime *timeOpt,
  501.   NSSUsage *usage,
  502.   NSSPolicies *policiesOpt,
  503.   NSSCallback *uhh,
  504.   NSSItem *rvOpt,
  505.   NSSArena *arenaOpt
  506. );
  507.  
  508. /*
  509.  * NSSUserCertificate_Sign
  510.  *
  511.  */
  512.  
  513. NSS_EXTERN NSSItem *
  514. NSSUserCertificate_Sign
  515. (
  516.   NSSUserCertificate *uc,
  517.   NSSAlgorithmAndParameters *apOpt,
  518.   NSSItem *data,
  519.   NSSTime *timeOpt,
  520.   NSSUsage *usage,
  521.   NSSPolicies *policiesOpt,
  522.   NSSCallback *uhh,
  523.   NSSItem *rvOpt,
  524.   NSSArena *arenaOpt
  525. );
  526.  
  527. /*
  528.  * NSSUserCertificate_SignRecover
  529.  *
  530.  */
  531.  
  532. NSS_EXTERN NSSItem *
  533. NSSUserCertificate_SignRecover
  534. (
  535.   NSSUserCertificate *uc,
  536.   NSSAlgorithmAndParameters *apOpt,
  537.   NSSItem *data,
  538.   NSSTime *timeOpt,
  539.   NSSUsage *usage,
  540.   NSSPolicies *policiesOpt,
  541.   NSSCallback *uhh,
  542.   NSSItem *rvOpt,
  543.   NSSArena *arenaOpt
  544. );
  545.  
  546. /*
  547.  * NSSUserCertificate_UnwrapSymmetricKey
  548.  *
  549.  */
  550.  
  551. NSS_EXTERN NSSSymmetricKey *
  552. NSSUserCertificate_UnwrapSymmetricKey
  553. (
  554.   NSSUserCertificate *uc,
  555.   NSSAlgorithmAndParameters *apOpt,
  556.   NSSItem *wrappedKey,
  557.   NSSTime *timeOpt,
  558.   NSSUsage *usage,
  559.   NSSPolicies *policiesOpt,
  560.   NSSCallback *uhh,
  561.   NSSItem *rvOpt,
  562.   NSSArena *arenaOpt
  563. );
  564.  
  565. /*
  566.  * NSSUserCertificate_DeriveSymmetricKey
  567.  *
  568.  */
  569.  
  570. NSS_EXTERN NSSSymmetricKey *
  571. NSSUserCertificate_DeriveSymmetricKey
  572. (
  573.   NSSUserCertificate *uc, /* provides private key */
  574.   NSSCertificate *c, /* provides public key */
  575.   NSSAlgorithmAndParameters *apOpt,
  576.   NSSOID *target,
  577.   PRUint32 keySizeOpt, /* zero for best allowed */
  578.   NSSOperations operations,
  579.   NSSCallback *uhh
  580. );
  581.  
  582. /* filter-certs function(s) */
  583.  
  584. /**
  585.  ** fgmr -- trust objects
  586.  **/
  587.  
  588. /*
  589.  * NSSPrivateKey
  590.  *
  591.  */
  592.  
  593. /*
  594.  * NSSPrivateKey_Destroy
  595.  *
  596.  * Free a pointer to a private key object.
  597.  */
  598.  
  599. NSS_EXTERN PRStatus
  600. NSSPrivateKey_Destroy
  601. (
  602.   NSSPrivateKey *vk
  603. );
  604.  
  605. /*
  606.  * NSSPrivateKey_DeleteStoredObject
  607.  *
  608.  * Permanently remove this object, and any related objects (such as the
  609.  * certificates corresponding to this key).
  610.  */
  611.  
  612. NSS_EXTERN PRStatus
  613. NSSPrivateKey_DeleteStoredObject
  614. (
  615.   NSSPrivateKey *vk,
  616.   NSSCallback *uhh
  617. );
  618.  
  619. /*
  620.  * NSSPrivateKey_GetSignatureLength
  621.  *
  622.  */
  623.  
  624. NSS_EXTERN PRUint32
  625. NSSPrivateKey_GetSignatureLength
  626. (
  627.   NSSPrivateKey *vk
  628. );
  629.  
  630. /*
  631.  * NSSPrivateKey_GetPrivateModulusLength
  632.  *
  633.  */
  634.  
  635. NSS_EXTERN PRUint32
  636. NSSPrivateKey_GetPrivateModulusLength
  637. (
  638.   NSSPrivateKey *vk
  639. );
  640.  
  641. /*
  642.  * NSSPrivateKey_IsStillPresent
  643.  *
  644.  */
  645.  
  646. NSS_EXTERN PRBool
  647. NSSPrivateKey_IsStillPresent
  648. (
  649.   NSSPrivateKey *vk,
  650.   PRStatus *statusOpt
  651. );
  652.  
  653. /*
  654.  * NSSPrivateKey_Encode
  655.  *
  656.  */
  657.  
  658. NSS_EXTERN NSSItem *
  659. NSSPrivateKey_Encode
  660. (
  661.   NSSPrivateKey *vk,
  662.   NSSAlgorithmAndParameters *ap,
  663.   NSSItem *passwordOpt, /* NULL will cause a callback; "" for no password */
  664.   NSSCallback *uhhOpt,
  665.   NSSItem *rvOpt,
  666.   NSSArena *arenaOpt
  667. );
  668.  
  669. /*
  670.  * NSSPrivateKey_GetTrustDomain
  671.  *
  672.  * There doesn't have to be one.
  673.  */
  674.  
  675. NSS_EXTERN NSSTrustDomain *
  676. NSSPrivateKey_GetTrustDomain
  677. (
  678.   NSSPrivateKey *vk,
  679.   PRStatus *statusOpt
  680. );
  681.  
  682. /*
  683.  * NSSPrivateKey_GetToken
  684.  *
  685.  */
  686.  
  687. NSS_EXTERN NSSToken *
  688. NSSPrivateKey_GetToken
  689. (
  690.   NSSPrivateKey *vk
  691. );
  692.  
  693. /*
  694.  * NSSPrivateKey_GetSlot
  695.  *
  696.  */
  697.  
  698. NSS_EXTERN NSSSlot *
  699. NSSPrivateKey_GetSlot
  700. (
  701.   NSSPrivateKey *vk
  702. );
  703.  
  704. /*
  705.  * NSSPrivateKey_GetModule
  706.  *
  707.  */
  708.  
  709. NSS_EXTERN NSSModule *
  710. NSSPrivateKey_GetModule
  711. (
  712.   NSSPrivateKey *vk
  713. );
  714.  
  715. /*
  716.  * NSSPrivateKey_Decrypt
  717.  *
  718.  */
  719.  
  720. NSS_EXTERN NSSItem *
  721. NSSPrivateKey_Decrypt
  722. (
  723.   NSSPrivateKey *vk,
  724.   NSSAlgorithmAndParameters *apOpt,
  725.   NSSItem *encryptedData,
  726.   NSSCallback *uhh,
  727.   NSSItem *rvOpt,
  728.   NSSArena *arenaOpt
  729. );
  730.  
  731. /*
  732.  * NSSPrivateKey_Sign
  733.  *
  734.  */
  735.  
  736. NSS_EXTERN NSSItem *
  737. NSSPrivateKey_Sign
  738. (
  739.   NSSPrivateKey *vk,
  740.   NSSAlgorithmAndParameters *apOpt,
  741.   NSSItem *data,
  742.   NSSCallback *uhh,
  743.   NSSItem *rvOpt,
  744.   NSSArena *arenaOpt
  745. );
  746.  
  747. /*
  748.  * NSSPrivateKey_SignRecover
  749.  *
  750.  */
  751.  
  752. NSS_EXTERN NSSItem *
  753. NSSPrivateKey_SignRecover
  754. (
  755.   NSSPrivateKey *vk,
  756.   NSSAlgorithmAndParameters *apOpt,
  757.   NSSItem *data,
  758.   NSSCallback *uhh,
  759.   NSSItem *rvOpt,
  760.   NSSArena *arenaOpt
  761. );
  762.  
  763. /*
  764.  * NSSPrivateKey_UnwrapSymmetricKey
  765.  *
  766.  */
  767.  
  768. NSS_EXTERN NSSSymmetricKey *
  769. NSSPrivateKey_UnwrapSymmetricKey
  770. (
  771.   NSSPrivateKey *vk,
  772.   NSSAlgorithmAndParameters *apOpt,
  773.   NSSItem *wrappedKey,
  774.   NSSCallback *uhh
  775. );
  776.  
  777. /*
  778.  * NSSPrivateKey_DeriveSymmetricKey
  779.  *
  780.  */
  781.  
  782. NSS_EXTERN NSSSymmetricKey *
  783. NSSPrivateKey_DeriveSymmetricKey
  784. (
  785.   NSSPrivateKey *vk,
  786.   NSSPublicKey *bk,
  787.   NSSAlgorithmAndParameters *apOpt,
  788.   NSSOID *target,
  789.   PRUint32 keySizeOpt, /* zero for best allowed */
  790.   NSSOperations operations,
  791.   NSSCallback *uhh
  792. );
  793.  
  794. /*
  795.  * NSSPrivateKey_FindPublicKey
  796.  *
  797.  */
  798.  
  799. NSS_EXTERN NSSPublicKey *
  800. NSSPrivateKey_FindPublicKey
  801. (
  802.   NSSPrivateKey *vk
  803.   /* { don't need the callback here, right? } */
  804. );
  805.  
  806. /*
  807.  * NSSPrivateKey_CreateCryptoContext
  808.  *
  809.  * Create a crypto context, in this key's trust domain,
  810.  * with this as the distinguished private key.
  811.  */
  812.  
  813. NSS_EXTERN NSSCryptoContext *
  814. NSSPrivateKey_CreateCryptoContext
  815. (
  816.   NSSPrivateKey *vk,
  817.   NSSAlgorithmAndParameters *apOpt,
  818.   NSSCallback *uhh
  819. );
  820.  
  821. /*
  822.  * NSSPrivateKey_FindCertificates
  823.  *
  824.  * Note that there may be more than one certificate for this
  825.  * private key.  { FilterCertificates function to further
  826.  * reduce the list. }
  827.  */
  828.  
  829. NSS_EXTERN NSSCertificate **
  830. NSSPrivateKey_FindCertificates
  831. (
  832.   NSSPrivateKey *vk,
  833.   NSSCertificate *rvOpt[],
  834.   PRUint32 maximumOpt, /* 0 for no max */
  835.   NSSArena *arenaOpt
  836. );
  837.  
  838. /*
  839.  * NSSPrivateKey_FindBestCertificate
  840.  *
  841.  * The parameters for this function will depend on what the users
  842.  * need.  This is just a starting point.
  843.  */
  844.  
  845. NSS_EXTERN NSSCertificate *
  846. NSSPrivateKey_FindBestCertificate
  847. (
  848.   NSSPrivateKey *vk,
  849.   NSSTime *timeOpt,
  850.   NSSUsage *usageOpt,
  851.   NSSPolicies *policiesOpt
  852. );
  853.  
  854. /*
  855.  * NSSPublicKey
  856.  *
  857.  * Once you generate, find, or derive one of these, you can use it
  858.  * to perform (simple) cryptographic operations.  Though there may
  859.  * be certificates associated with these public keys, they are not
  860.  * verified.
  861.  */
  862.  
  863. /*
  864.  * NSSPublicKey_Destroy
  865.  *
  866.  * Free a pointer to a public key object.
  867.  */
  868.  
  869. NSS_EXTERN PRStatus
  870. NSSPublicKey_Destroy
  871. (
  872.   NSSPublicKey *bk
  873. );
  874.  
  875. /*
  876.  * NSSPublicKey_DeleteStoredObject
  877.  *
  878.  * Permanently remove this object, and any related objects (such as the
  879.  * corresponding private keys and certificates).
  880.  */
  881.  
  882. NSS_EXTERN PRStatus
  883. NSSPublicKey_DeleteStoredObject
  884. (
  885.   NSSPublicKey *bk,
  886.   NSSCallback *uhh
  887. );
  888.  
  889. /*
  890.  * NSSPublicKey_Encode
  891.  *
  892.  */
  893.  
  894. NSS_EXTERN NSSItem *
  895. NSSPublicKey_Encode
  896. (
  897.   NSSPublicKey *bk,
  898.   NSSAlgorithmAndParameters *ap,
  899.   NSSCallback *uhhOpt,
  900.   NSSItem *rvOpt,
  901.   NSSArena *arenaOpt
  902. );
  903.  
  904. /*
  905.  * NSSPublicKey_GetTrustDomain
  906.  *
  907.  * There doesn't have to be one.
  908.  */
  909.  
  910. NSS_EXTERN NSSTrustDomain *
  911. NSSPublicKey_GetTrustDomain
  912. (
  913.   NSSPublicKey *bk,
  914.   PRStatus *statusOpt
  915. );
  916.  
  917. /*
  918.  * NSSPublicKey_GetToken
  919.  *
  920.  * There doesn't have to be one.
  921.  */
  922.  
  923. NSS_EXTERN NSSToken *
  924. NSSPublicKey_GetToken
  925. (
  926.   NSSPublicKey *bk,
  927.   PRStatus *statusOpt
  928. );
  929.  
  930. /*
  931.  * NSSPublicKey_GetSlot
  932.  *
  933.  * There doesn't have to be one.
  934.  */
  935.  
  936. NSS_EXTERN NSSSlot *
  937. NSSPublicKey_GetSlot
  938. (
  939.   NSSPublicKey *bk,
  940.   PRStatus *statusOpt
  941. );
  942.  
  943. /*
  944.  * NSSPublicKey_GetModule
  945.  *
  946.  * There doesn't have to be one.
  947.  */
  948.  
  949. NSS_EXTERN NSSModule *
  950. NSSPublicKey_GetModule
  951. (
  952.   NSSPublicKey *bk,
  953.   PRStatus *statusOpt
  954. );
  955.  
  956. /*
  957.  * NSSPublicKey_Encrypt
  958.  *
  959.  * Encrypt a single chunk of data with the public key corresponding to
  960.  * this certificate.
  961.  */
  962.  
  963. NSS_EXTERN NSSItem *
  964. NSSPublicKey_Encrypt
  965. (
  966.   NSSPublicKey *bk,
  967.   NSSAlgorithmAndParameters *apOpt,
  968.   NSSItem *data,
  969.   NSSCallback *uhh,
  970.   NSSItem *rvOpt,
  971.   NSSArena *arenaOpt
  972. );
  973.  
  974. /*
  975.  * NSSPublicKey_Verify
  976.  *
  977.  */
  978.  
  979. NSS_EXTERN PRStatus
  980. NSSPublicKey_Verify
  981. (
  982.   NSSPublicKey *bk,
  983.   NSSAlgorithmAndParameters *apOpt,
  984.   NSSItem *data,
  985.   NSSItem *signature,
  986.   NSSCallback *uhh
  987. );
  988.  
  989. /*
  990.  * NSSPublicKey_VerifyRecover
  991.  *
  992.  */
  993.  
  994. NSS_EXTERN NSSItem *
  995. NSSPublicKey_VerifyRecover
  996. (
  997.   NSSPublicKey *bk,
  998.   NSSAlgorithmAndParameters *apOpt,
  999.   NSSItem *signature,
  1000.   NSSCallback *uhh,
  1001.   NSSItem *rvOpt,
  1002.   NSSArena *arenaOpt
  1003. );
  1004.  
  1005. /*
  1006.  * NSSPublicKey_WrapSymmetricKey
  1007.  *
  1008.  */
  1009.  
  1010. NSS_EXTERN NSSItem *
  1011. NSSPublicKey_WrapSymmetricKey
  1012. (
  1013.   NSSPublicKey *bk,
  1014.   NSSAlgorithmAndParameters *apOpt,
  1015.   NSSSymmetricKey *keyToWrap,
  1016.   NSSCallback *uhh,
  1017.   NSSItem *rvOpt,
  1018.   NSSArena *arenaOpt
  1019. );
  1020.  
  1021. /*
  1022.  * NSSPublicKey_CreateCryptoContext
  1023.  *
  1024.  * Create a crypto context, in this key's trust domain, with this
  1025.  * as the distinguished public key.
  1026.  */
  1027.  
  1028. NSS_EXTERN NSSCryptoContext *
  1029. NSSPublicKey_CreateCryptoContext
  1030. (
  1031.   NSSPublicKey *bk,
  1032.   NSSAlgorithmAndParameters *apOpt,
  1033.   NSSCallback *uhh
  1034. );
  1035.  
  1036. /*
  1037.  * NSSPublicKey_FindCertificates
  1038.  *
  1039.  * Note that there may be more than one certificate for this
  1040.  * public key.  The current implementation may not find every
  1041.  * last certificate available for this public key: that would
  1042.  * involve trolling e.g. huge ldap databases, which will be
  1043.  * grossly inefficient and not generally useful.
  1044.  * { FilterCertificates function to further reduce the list }
  1045.  */
  1046.  
  1047. NSS_EXTERN NSSCertificate **
  1048. NSSPublicKey_FindCertificates
  1049. (
  1050.   NSSPublicKey *bk,
  1051.   NSSCertificate *rvOpt[],
  1052.   PRUint32 maximumOpt, /* 0 for no max */
  1053.   NSSArena *arenaOpt
  1054. );
  1055.  
  1056. /*
  1057.  * NSSPrivateKey_FindBestCertificate
  1058.  *
  1059.  * The parameters for this function will depend on what the users
  1060.  * need.  This is just a starting point.
  1061.  */
  1062.  
  1063. NSS_EXTERN NSSCertificate *
  1064. NSSPublicKey_FindBestCertificate
  1065. (
  1066.   NSSPublicKey *bk,
  1067.   NSSTime *timeOpt,
  1068.   NSSUsage *usageOpt,
  1069.   NSSPolicies *policiesOpt
  1070. );
  1071.  
  1072. /*
  1073.  * NSSPublicKey_FindPrivateKey
  1074.  *
  1075.  */
  1076.  
  1077. NSS_EXTERN NSSPrivateKey *
  1078. NSSPublicKey_FindPrivateKey
  1079. (
  1080.   NSSPublicKey *bk,
  1081.   NSSCallback *uhh
  1082. );
  1083.  
  1084. /*
  1085.  * NSSSymmetricKey
  1086.  *
  1087.  */
  1088.  
  1089. /*
  1090.  * NSSSymmetricKey_Destroy
  1091.  *
  1092.  * Free a pointer to a symmetric key object.
  1093.  */
  1094.  
  1095. NSS_EXTERN PRStatus
  1096. NSSSymmetricKey_Destroy
  1097. (
  1098.   NSSSymmetricKey *mk
  1099. );
  1100.  
  1101. /*
  1102.  * NSSSymmetricKey_DeleteStoredObject
  1103.  *
  1104.  * Permanently remove this object.
  1105.  */
  1106.  
  1107. NSS_EXTERN PRStatus
  1108. NSSSymmetricKey_DeleteStoredObject
  1109. (
  1110.   NSSSymmetricKey *mk,
  1111.   NSSCallback *uhh
  1112. );
  1113.  
  1114. /*
  1115.  * NSSSymmetricKey_GetKeyLength
  1116.  *
  1117.  */
  1118.  
  1119. NSS_EXTERN PRUint32
  1120. NSSSymmetricKey_GetKeyLength
  1121. (
  1122.   NSSSymmetricKey *mk
  1123. );
  1124.  
  1125. /*
  1126.  * NSSSymmetricKey_GetKeyStrength
  1127.  *
  1128.  */
  1129.  
  1130. NSS_EXTERN PRUint32
  1131. NSSSymmetricKey_GetKeyStrength
  1132. (
  1133.   NSSSymmetricKey *mk
  1134. );
  1135.  
  1136. /*
  1137.  * NSSSymmetricKey_IsStillPresent
  1138.  *
  1139.  */
  1140.  
  1141. NSS_EXTERN PRStatus
  1142. NSSSymmetricKey_IsStillPresent
  1143. (
  1144.   NSSSymmetricKey *mk
  1145. );
  1146.  
  1147. /*
  1148.  * NSSSymmetricKey_GetTrustDomain
  1149.  *
  1150.  * There doesn't have to be one.
  1151.  */
  1152.  
  1153. NSS_EXTERN NSSTrustDomain *
  1154. NSSSymmetricKey_GetTrustDomain
  1155. (
  1156.   NSSSymmetricKey *mk,
  1157.   PRStatus *statusOpt
  1158. );
  1159.  
  1160. /*
  1161.  * NSSSymmetricKey_GetToken
  1162.  *
  1163.  * There doesn't have to be one.
  1164.  */
  1165.  
  1166. NSS_EXTERN NSSToken *
  1167. NSSSymmetricKey_GetToken
  1168. (
  1169.   NSSSymmetricKey *mk,
  1170.   PRStatus *statusOpt
  1171. );
  1172.  
  1173. /*
  1174.  * NSSSymmetricKey_GetSlot
  1175.  *
  1176.  * There doesn't have to be one.
  1177.  */
  1178.  
  1179. NSS_EXTERN NSSSlot *
  1180. NSSSymmetricKey_GetSlot
  1181. (
  1182.   NSSSymmetricKey *mk,
  1183.   PRStatus *statusOpt
  1184. );
  1185.  
  1186. /*
  1187.  * NSSSymmetricKey_GetModule
  1188.  *
  1189.  * There doesn't have to be one.
  1190.  */
  1191.  
  1192. NSS_EXTERN NSSModule *
  1193. NSSSymmetricKey_GetModule
  1194. (
  1195.   NSSSymmetricKey *mk,
  1196.   PRStatus *statusOpt
  1197. );
  1198.  
  1199. /*
  1200.  * NSSSymmetricKey_Encrypt
  1201.  *
  1202.  */
  1203.  
  1204. NSS_EXTERN NSSItem *
  1205. NSSSymmetricKey_Encrypt
  1206. (
  1207.   NSSSymmetricKey *mk,
  1208.   NSSAlgorithmAndParameters *apOpt,
  1209.   NSSItem *data,
  1210.   NSSCallback *uhh,
  1211.   NSSItem *rvOpt,
  1212.   NSSArena *arenaOpt
  1213. );
  1214.  
  1215. /*
  1216.  * NSSSymmetricKey_Decrypt
  1217.  *
  1218.  */
  1219.  
  1220. NSS_EXTERN NSSItem *
  1221. NSSSymmetricKey_Decrypt
  1222. (
  1223.   NSSSymmetricKey *mk,
  1224.   NSSAlgorithmAndParameters *apOpt,
  1225.   NSSItem *encryptedData,
  1226.   NSSCallback *uhh,
  1227.   NSSItem *rvOpt,
  1228.   NSSArena *arenaOpt
  1229. );
  1230.  
  1231. /*
  1232.  * NSSSymmetricKey_Sign
  1233.  *
  1234.  */
  1235.  
  1236. NSS_EXTERN NSSItem *
  1237. NSSSymmetricKey_Sign
  1238. (
  1239.   NSSSymmetricKey *mk,
  1240.   NSSAlgorithmAndParameters *apOpt,
  1241.   NSSItem *data,
  1242.   NSSCallback *uhh,
  1243.   NSSItem *rvOpt,
  1244.   NSSArena *arenaOpt
  1245. );
  1246.  
  1247. /*
  1248.  * NSSSymmetricKey_SignRecover
  1249.  *
  1250.  */
  1251.  
  1252. NSS_EXTERN NSSItem *
  1253. NSSSymmetricKey_SignRecover
  1254. (
  1255.   NSSSymmetricKey *mk,
  1256.   NSSAlgorithmAndParameters *apOpt,
  1257.   NSSItem *data,
  1258.   NSSCallback *uhh,
  1259.   NSSItem *rvOpt,
  1260.   NSSArena *arenaOpt
  1261. );
  1262.  
  1263. /*
  1264.  * NSSSymmetricKey_Verify
  1265.  *
  1266.  */
  1267.  
  1268. NSS_EXTERN PRStatus
  1269. NSSSymmetricKey_Verify
  1270. (
  1271.   NSSSymmetricKey *mk,
  1272.   NSSAlgorithmAndParameters *apOpt,
  1273.   NSSItem *data,
  1274.   NSSItem *signature,
  1275.   NSSCallback *uhh
  1276. );
  1277.  
  1278. /*
  1279.  * NSSSymmetricKey_VerifyRecover
  1280.  *
  1281.  */
  1282.  
  1283. NSS_EXTERN NSSItem *
  1284. NSSSymmetricKey_VerifyRecover
  1285. (
  1286.   NSSSymmetricKey *mk,
  1287.   NSSAlgorithmAndParameters *apOpt,
  1288.   NSSItem *signature,
  1289.   NSSCallback *uhh,
  1290.   NSSItem *rvOpt,
  1291.   NSSArena *arenaOpt
  1292. );
  1293.  
  1294. /*
  1295.  * NSSSymmetricKey_WrapSymmetricKey
  1296.  *
  1297.  */
  1298.  
  1299. NSS_EXTERN NSSItem *
  1300. NSSSymmetricKey_WrapSymmetricKey
  1301. (
  1302.   NSSSymmetricKey *wrappingKey,
  1303.   NSSAlgorithmAndParameters *apOpt,
  1304.   NSSSymmetricKey *keyToWrap,
  1305.   NSSCallback *uhh,
  1306.   NSSItem *rvOpt,
  1307.   NSSArena *arenaOpt
  1308. );
  1309.  
  1310. /*
  1311.  * NSSSymmetricKey_WrapPrivateKey
  1312.  *
  1313.  */
  1314.  
  1315. NSS_EXTERN NSSItem *
  1316. NSSSymmetricKey_WrapPrivateKey
  1317. (
  1318.   NSSSymmetricKey *wrappingKey,
  1319.   NSSAlgorithmAndParameters *apOpt,
  1320.   NSSPrivateKey *keyToWrap,
  1321.   NSSCallback *uhh,
  1322.   NSSItem *rvOpt,
  1323.   NSSArena *arenaOpt
  1324. );
  1325.  
  1326. /*
  1327.  * NSSSymmetricKey_UnwrapSymmetricKey
  1328.  *
  1329.  */
  1330.  
  1331. NSS_EXTERN NSSSymmetricKey *
  1332. NSSSymmetricKey_UnwrapSymmetricKey
  1333. (
  1334.   NSSSymmetricKey *wrappingKey,
  1335.   NSSAlgorithmAndParameters *apOpt,
  1336.   NSSItem *wrappedKey,
  1337.   NSSOID *target,
  1338.   PRUint32 keySizeOpt,
  1339.   NSSOperations operations,
  1340.   NSSCallback *uhh
  1341. );
  1342.  
  1343. /*
  1344.  * NSSSymmetricKey_UnwrapPrivateKey
  1345.  *
  1346.  */
  1347.  
  1348. NSS_EXTERN NSSPrivateKey *
  1349. NSSSymmetricKey_UnwrapPrivateKey
  1350. (
  1351.   NSSSymmetricKey *wrappingKey,
  1352.   NSSAlgorithmAndParameters *apOpt,
  1353.   NSSItem *wrappedKey,
  1354.   NSSUTF8 *labelOpt,
  1355.   NSSItem *keyIDOpt,
  1356.   PRBool persistant,
  1357.   PRBool sensitive,
  1358.   NSSToken *destinationOpt,
  1359.   NSSCallback *uhh
  1360. );
  1361.  
  1362. /*
  1363.  * NSSSymmetricKey_DeriveSymmetricKey
  1364.  *
  1365.  */
  1366.  
  1367. NSS_EXTERN NSSSymmetricKey *
  1368. NSSSymmetricKey_DeriveSymmetricKey
  1369. (
  1370.   NSSSymmetricKey *originalKey,
  1371.   NSSAlgorithmAndParameters *apOpt,
  1372.   NSSOID *target,
  1373.   PRUint32 keySizeOpt,
  1374.   NSSOperations operations,
  1375.   NSSCallback *uhh
  1376. );
  1377.  
  1378. /*
  1379.  * NSSSymmetricKey_CreateCryptoContext
  1380.  *
  1381.  * Create a crypto context, in this key's trust domain,
  1382.  * with this as the distinguished symmetric key.
  1383.  */
  1384.  
  1385. NSS_EXTERN NSSCryptoContext *
  1386. NSSSymmetricKey_CreateCryptoContext
  1387. (
  1388.   NSSSymmetricKey *mk,
  1389.   NSSAlgorithmAndParameters *apOpt,
  1390.   NSSCallback *uhh
  1391. );
  1392.  
  1393. /*
  1394.  * NSSTrustDomain
  1395.  *
  1396.  */
  1397.  
  1398. /*
  1399.  * NSSTrustDomain_Create
  1400.  *
  1401.  * This creates a trust domain, optionally with an initial cryptoki
  1402.  * module.  If the module name is not null, the module is loaded if
  1403.  * needed (using the uriOpt argument), and initialized with the
  1404.  * opaqueOpt argument.  If mumble mumble priority settings, then
  1405.  * module-specification objects in the module can cause the loading
  1406.  * and initialization of further modules.
  1407.  *
  1408.  * The uriOpt is defined to take a URI.  At present, we only
  1409.  * support file: URLs pointing to platform-native shared libraries.
  1410.  * However, by specifying this as a URI, this keeps open the 
  1411.  * possibility of supporting other, possibly remote, resources.
  1412.  *
  1413.  * The "reserved" arguments is held for when we figure out the
  1414.  * module priority stuff.
  1415.  */
  1416.  
  1417. NSS_EXTERN NSSTrustDomain *
  1418. NSSTrustDomain_Create
  1419. (
  1420.   NSSUTF8 *moduleOpt,
  1421.   NSSUTF8 *uriOpt,
  1422.   NSSUTF8 *opaqueOpt,
  1423.   void *reserved
  1424. );
  1425.  
  1426. /*
  1427.  * NSSTrustDomain_Destroy
  1428.  *
  1429.  */
  1430.  
  1431. NSS_EXTERN PRStatus
  1432. NSSTrustDomain_Destroy
  1433. (
  1434.   NSSTrustDomain *td
  1435. );
  1436.  
  1437. /*
  1438.  * NSSTrustDomain_SetDefaultCallback
  1439.  *
  1440.  */
  1441.  
  1442. NSS_EXTERN PRStatus
  1443. NSSTrustDomain_SetDefaultCallback
  1444. (
  1445.   NSSTrustDomain *td,
  1446.   NSSCallback *newCallback,
  1447.   NSSCallback **oldCallbackOpt
  1448. );
  1449.  
  1450. /*
  1451.  * NSSTrustDomain_GetDefaultCallback
  1452.  *
  1453.  */
  1454.  
  1455. NSS_EXTERN NSSCallback *
  1456. NSSTrustDomain_GetDefaultCallback
  1457. (
  1458.   NSSTrustDomain *td,
  1459.   PRStatus *statusOpt
  1460. );
  1461.  
  1462. /*
  1463.  * Default policies?
  1464.  * Default usage?
  1465.  * Default time, for completeness?
  1466.  */
  1467.  
  1468. /*
  1469.  * NSSTrustDomain_LoadModule
  1470.  *
  1471.  */
  1472.  
  1473. NSS_EXTERN PRStatus
  1474. NSSTrustDomain_LoadModule
  1475. (
  1476.   NSSTrustDomain *td,
  1477.   NSSUTF8 *moduleOpt,
  1478.   NSSUTF8 *uriOpt,
  1479.   NSSUTF8 *opaqueOpt,
  1480.   void *reserved
  1481. );
  1482.  
  1483. /*
  1484.  * NSSTrustDomain_AddModule
  1485.  * NSSTrustDomain_AddSlot
  1486.  * NSSTrustDomain_UnloadModule
  1487.  * Managing modules, slots, tokens; priorities;
  1488.  * Traversing all of the above
  1489.  * this needs more work
  1490.  */
  1491.  
  1492. /*
  1493.  * NSSTrustDomain_DisableToken
  1494.  *
  1495.  */
  1496.  
  1497. NSS_EXTERN PRStatus
  1498. NSSTrustDomain_DisableToken
  1499. (
  1500.   NSSTrustDomain *td,
  1501.   NSSToken *token,
  1502.   NSSError why
  1503. );
  1504.  
  1505. /*
  1506.  * NSSTrustDomain_EnableToken
  1507.  *
  1508.  */
  1509.  
  1510. NSS_EXTERN PRStatus
  1511. NSSTrustDomain_EnableToken
  1512. (
  1513.   NSSTrustDomain *td,
  1514.   NSSToken *token
  1515. );
  1516.  
  1517. /*
  1518.  * NSSTrustDomain_IsTokenEnabled
  1519.  *
  1520.  * If disabled, "why" is always on the error stack.
  1521.  * The optional argument is just for convenience.
  1522.  */
  1523.  
  1524. NSS_EXTERN PRStatus
  1525. NSSTrustDomain_IsTokenEnabled
  1526. (
  1527.   NSSTrustDomain *td,
  1528.   NSSToken *token,
  1529.   NSSError *whyOpt
  1530. );
  1531.  
  1532. /*
  1533.  * NSSTrustDomain_FindSlotByName
  1534.  *
  1535.  */
  1536.  
  1537. NSS_EXTERN NSSSlot *
  1538. NSSTrustDomain_FindSlotByName
  1539. (
  1540.   NSSTrustDomain *td,
  1541.   NSSUTF8 *slotName
  1542. );
  1543.  
  1544. /*
  1545.  * NSSTrustDomain_FindTokenByName
  1546.  *
  1547.  */
  1548.  
  1549. NSS_EXTERN NSSToken *
  1550. NSSTrustDomain_FindTokenByName
  1551. (
  1552.   NSSTrustDomain *td,
  1553.   NSSUTF8 *tokenName
  1554. );
  1555.  
  1556. /*
  1557.  * NSSTrustDomain_FindTokenBySlotName
  1558.  *
  1559.  */
  1560.  
  1561. NSS_EXTERN NSSToken *
  1562. NSSTrustDomain_FindTokenBySlotName
  1563. (
  1564.   NSSTrustDomain *td,
  1565.   NSSUTF8 *slotName
  1566. );
  1567.  
  1568. /*
  1569.  * NSSTrustDomain_FindBestTokenForAlgorithm
  1570.  *
  1571.  */
  1572.  
  1573. NSS_EXTERN NSSToken *
  1574. NSSTrustDomain_FindTokenForAlgorithm
  1575. (
  1576.   NSSTrustDomain *td,
  1577.   NSSOID *algorithm
  1578. );
  1579.  
  1580. /*
  1581.  * NSSTrustDomain_FindBestTokenForAlgorithms
  1582.  *
  1583.  */
  1584.  
  1585. NSS_EXTERN NSSToken *
  1586. NSSTrustDomain_FindBestTokenForAlgorithms
  1587. (
  1588.   NSSTrustDomain *td,
  1589.   NSSOID *algorithms[], /* may be null-terminated */
  1590.   PRUint32 nAlgorithmsOpt /* limits the array if nonzero */
  1591. );
  1592.  
  1593. /*
  1594.  * NSSTrustDomain_Login
  1595.  *
  1596.  */
  1597.  
  1598. NSS_EXTERN PRStatus
  1599. NSSTrustDomain_Login
  1600. (
  1601.   NSSTrustDomain *td,
  1602.   NSSCallback *uhhOpt
  1603. );
  1604.  
  1605. /*
  1606.  * NSSTrustDomain_Logout
  1607.  *
  1608.  */
  1609.  
  1610. NSS_EXTERN PRStatus
  1611. NSSTrustDomain_Logout
  1612. (
  1613.   NSSTrustDomain *td
  1614. );
  1615.  
  1616. /* Importing things */
  1617.  
  1618. /*
  1619.  * NSSTrustDomain_ImportCertificate
  1620.  *
  1621.  * The implementation will pull some data out of the certificate
  1622.  * (e.g. e-mail address) for use in pkcs#11 object attributes.
  1623.  */
  1624.  
  1625. NSS_EXTERN NSSCertificate *
  1626. NSSTrustDomain_ImportCertificate
  1627. (
  1628.   NSSTrustDomain *td,
  1629.   NSSCertificate *c
  1630. );
  1631.  
  1632. /*
  1633.  * NSSTrustDomain_ImportPKIXCertificate
  1634.  *
  1635.  */
  1636.  
  1637. NSS_EXTERN NSSCertificate *
  1638. NSSTrustDomain_ImportPKIXCertificate
  1639. (
  1640.   NSSTrustDomain *td,
  1641.   /* declared as a struct until these "data types" are defined */
  1642.   struct NSSPKIXCertificateStr *pc
  1643. );
  1644.  
  1645. /*
  1646.  * NSSTrustDomain_ImportEncodedCertificate
  1647.  *
  1648.  * Imports any type of certificate we support.
  1649.  */
  1650.  
  1651. NSS_EXTERN NSSCertificate *
  1652. NSSTrustDomain_ImportEncodedCertificate
  1653. (
  1654.   NSSTrustDomain *td,
  1655.   NSSBER *ber
  1656. );
  1657.  
  1658. /*
  1659.  * NSSTrustDomain_ImportEncodedCertificateChain
  1660.  *
  1661.  * If you just want the leaf, pass in a maximum of one.
  1662.  */
  1663.  
  1664. NSS_EXTERN NSSCertificate **
  1665. NSSTrustDomain_ImportEncodedCertificateChain
  1666. (
  1667.   NSSTrustDomain *td,
  1668.   NSSBER *ber,
  1669.   NSSCertificate *rvOpt[],
  1670.   PRUint32 maximumOpt, /* 0 for no max */
  1671.   NSSArena *arenaOpt
  1672. );
  1673.  
  1674. /*
  1675.  * NSSTrustDomain_ImportEncodedPrivateKey
  1676.  *
  1677.  */
  1678.  
  1679. NSS_EXTERN NSSPrivateKey *
  1680. NSSTrustDomain_ImportEncodedPrivateKey
  1681. (
  1682.   NSSTrustDomain *td,
  1683.   NSSBER *ber,
  1684.   NSSItem *passwordOpt, /* NULL will cause a callback */
  1685.   NSSCallback *uhhOpt,
  1686.   NSSToken *destination
  1687. );
  1688.  
  1689. /*
  1690.  * NSSTrustDomain_ImportEncodedPublicKey
  1691.  *
  1692.  */
  1693.  
  1694. NSS_EXTERN NSSPublicKey *
  1695. NSSTrustDomain_ImportEncodedPublicKey
  1696. (
  1697.   NSSTrustDomain *td,
  1698.   NSSBER *ber
  1699. );
  1700.  
  1701. /* Other importations: S/MIME capabilities */
  1702.  
  1703. /*
  1704.  * NSSTrustDomain_FindBestCertificateByNickname
  1705.  *
  1706.  */
  1707.  
  1708. NSS_EXTERN NSSCertificate *
  1709. NSSTrustDomain_FindBestCertificateByNickname
  1710. (
  1711.   NSSTrustDomain *td,
  1712.   NSSUTF8 *name,
  1713.   NSSTime *timeOpt, /* NULL for "now" */
  1714.   NSSUsage *usage,
  1715.   NSSPolicies *policiesOpt /* NULL for none */
  1716. );
  1717.  
  1718. /*
  1719.  * NSSTrustDomain_FindCertificatesByNickname
  1720.  *
  1721.  */
  1722.  
  1723. NSS_EXTERN NSSCertificate **
  1724. NSSTrustDomain_FindCertificatesByNickname
  1725. (
  1726.   NSSTrustDomain *td,
  1727.   NSSUTF8 *name,
  1728.   NSSCertificate *rvOpt[],
  1729.   PRUint32 maximumOpt, /* 0 for no max */
  1730.   NSSArena *arenaOpt
  1731. );
  1732.  
  1733. /*
  1734.  * NSSTrustDomain_FindCertificateByIssuerAndSerialNumber
  1735.  *
  1736.  */
  1737.  
  1738. NSS_EXTERN NSSCertificate *
  1739. NSSTrustDomain_FindCertificateByIssuerAndSerialNumber
  1740. (
  1741.   NSSTrustDomain *td,
  1742.   NSSDER *issuer,
  1743.   NSSDER *serialNumber
  1744. );
  1745.  
  1746. /*
  1747.  * NSSTrustDomain_FindCertificatesByIssuerAndSerialNumber
  1748.  *
  1749.  * Theoretically, this should never happen.  However, some companies
  1750.  * we know have issued duplicate certificates with the same issuer
  1751.  * and serial number.  Do we just ignore them?  I'm thinking yes.
  1752.  */
  1753.  
  1754. /*
  1755.  * NSSTrustDomain_FindBestCertificateBySubject
  1756.  *
  1757.  * This does not search through alternate names hidden in extensions.
  1758.  */
  1759.  
  1760. NSS_EXTERN NSSCertificate *
  1761. NSSTrustDomain_FindBestCertificateBySubject
  1762. (
  1763.   NSSTrustDomain *td,
  1764.   NSSDER /*NSSUTF8*/ *subject,
  1765.   NSSTime *timeOpt,
  1766.   NSSUsage *usage,
  1767.   NSSPolicies *policiesOpt
  1768. );
  1769.  
  1770. /*
  1771.  * NSSTrustDomain_FindCertificatesBySubject
  1772.  *
  1773.  * This does not search through alternate names hidden in extensions.
  1774.  */
  1775.  
  1776. NSS_EXTERN NSSCertificate **
  1777. NSSTrustDomain_FindCertificatesBySubject
  1778. (
  1779.   NSSTrustDomain *td,
  1780.   NSSDER /*NSSUTF8*/ *subject,
  1781.   NSSCertificate *rvOpt[],
  1782.   PRUint32 maximumOpt, /* 0 for no max */
  1783.   NSSArena *arenaOpt
  1784. );
  1785.  
  1786. /*
  1787.  * NSSTrustDomain_FindBestCertificateByNameComponents
  1788.  *
  1789.  * This call does try several tricks, including a pseudo pkcs#11 
  1790.  * attribute for the ldap module to try as a query.  Eventually
  1791.  * this call falls back to a traversal if that's what's required.
  1792.  * It will search through alternate names hidden in extensions.
  1793.  */
  1794.  
  1795. NSS_EXTERN NSSCertificate *
  1796. NSSTrustDomain_FindBestCertificateByNameComponents
  1797. (
  1798.   NSSTrustDomain *td,
  1799.   NSSUTF8 *nameComponents,
  1800.   NSSTime *timeOpt,
  1801.   NSSUsage *usage,
  1802.   NSSPolicies *policiesOpt
  1803. );
  1804.  
  1805. /*
  1806.  * NSSTrustDomain_FindCertificatesByNameComponents
  1807.  *
  1808.  * This call, too, tries several tricks.  It will stop on the first
  1809.  * attempt that generates results, so it won't e.g. traverse the
  1810.  * entire ldap database.
  1811.  */
  1812.  
  1813. NSS_EXTERN NSSCertificate **
  1814. NSSTrustDomain_FindCertificatesByNameComponents
  1815. (
  1816.   NSSTrustDomain *td,
  1817.   NSSUTF8 *nameComponents,
  1818.   NSSCertificate *rvOpt[],
  1819.   PRUint32 maximumOpt, /* 0 for no max */
  1820.   NSSArena *arenaOpt
  1821. );
  1822.  
  1823. /*
  1824.  * NSSTrustDomain_FindCertificateByEncodedCertificate
  1825.  *
  1826.  */
  1827.  
  1828. NSS_EXTERN NSSCertificate *
  1829. NSSTrustDomain_FindCertificateByEncodedCertificate
  1830. (
  1831.   NSSTrustDomain *td,
  1832.   NSSBER *encodedCertificate
  1833. );
  1834.  
  1835. /*
  1836.  * NSSTrustDomain_FindBestCertificateByEmail
  1837.  *
  1838.  */
  1839.  
  1840. NSS_EXTERN NSSCertificate *
  1841. NSSTrustDomain_FindCertificateByEmail
  1842. (
  1843.   NSSTrustDomain *td,
  1844.   NSSASCII7 *email,
  1845.   NSSTime *timeOpt,
  1846.   NSSUsage *usage,
  1847.   NSSPolicies *policiesOpt
  1848. );
  1849.  
  1850. /*
  1851.  * NSSTrustDomain_FindCertificatesByEmail
  1852.  *
  1853.  */
  1854.  
  1855. NSS_EXTERN NSSCertificate **
  1856. NSSTrustDomain_FindCertificatesByEmail
  1857. (
  1858.   NSSTrustDomain *td,
  1859.   NSSASCII7 *email,
  1860.   NSSCertificate *rvOpt[],
  1861.   PRUint32 maximumOpt, /* 0 for no max */
  1862.   NSSArena *arenaOpt
  1863. );
  1864.  
  1865. /*
  1866.  * NSSTrustDomain_FindCertificateByOCSPHash
  1867.  *
  1868.  * There can be only one.
  1869.  */
  1870.  
  1871. NSS_EXTERN NSSCertificate *
  1872. NSSTrustDomain_FindCertificateByOCSPHash
  1873. (
  1874.   NSSTrustDomain *td,
  1875.   NSSItem *hash
  1876. );
  1877.  
  1878. /*
  1879.  * NSSTrustDomain_TraverseCertificates
  1880.  *
  1881.  * This function descends from one in older versions of NSS which
  1882.  * traverses the certs in the permanent database.  That function
  1883.  * was used to implement selection routines, but was directly
  1884.  * available too.  Trust domains are going to contain a lot more
  1885.  * certs now (e.g., an ldap server), so we'd really like to
  1886.  * discourage traversal.  Thus for now, this is commented out.
  1887.  * If it's needed, let's look at the situation more closely to
  1888.  * find out what the actual requirements are.
  1889.  */
  1890.  
  1891. /* For now, adding this function.  This may only be for debugging
  1892.  * purposes.
  1893.  * Perhaps some equivalent function, on a specified token, will be
  1894.  * needed in a "friend" header file?
  1895.  */
  1896. NSS_EXTERN PRStatus *
  1897. NSSTrustDomain_TraverseCertificates
  1898. (
  1899.   NSSTrustDomain *td,
  1900.   PRStatus (*callback)(NSSCertificate *c, void *arg),
  1901.   void *arg
  1902. );
  1903.  
  1904. /*
  1905.  * NSSTrustDomain_FindBestUserCertificate
  1906.  *
  1907.  */
  1908.  
  1909. NSS_EXTERN NSSCertificate *
  1910. NSSTrustDomain_FindBestUserCertificate
  1911. (
  1912.   NSSTrustDomain *td,
  1913.   NSSTime *timeOpt,
  1914.   NSSUsage *usage,
  1915.   NSSPolicies *policiesOpt
  1916. );
  1917.  
  1918. /*
  1919.  * NSSTrustDomain_FindUserCertificates
  1920.  *
  1921.  */
  1922.  
  1923. NSS_EXTERN NSSCertificate **
  1924. NSSTrustDomain_FindUserCertificates
  1925. (
  1926.   NSSTrustDomain *td,
  1927.   NSSTime *timeOpt,
  1928.   NSSUsage *usageOpt,
  1929.   NSSPolicies *policiesOpt,
  1930.   NSSCertificate **rvOpt,
  1931.   PRUint32 rvLimit, /* zero for no limit */
  1932.   NSSArena *arenaOpt
  1933. );
  1934.  
  1935. /*
  1936.  * NSSTrustDomain_FindBestUserCertificateForSSLClientAuth
  1937.  *
  1938.  */
  1939.  
  1940. NSS_EXTERN NSSCertificate *
  1941. NSSTrustDomain_FindBestUserCertificateForSSLClientAuth
  1942. (
  1943.   NSSTrustDomain *td,
  1944.   NSSUTF8 *sslHostOpt,
  1945.   NSSDER *rootCAsOpt[], /* null pointer for none */
  1946.   PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
  1947.   NSSAlgorithmAndParameters *apOpt,
  1948.   NSSPolicies *policiesOpt
  1949. );
  1950.  
  1951. /*
  1952.  * NSSTrustDomain_FindUserCertificatesForSSLClientAuth
  1953.  *
  1954.  */
  1955.  
  1956. NSS_EXTERN NSSCertificate **
  1957. NSSTrustDomain_FindUserCertificatesForSSLClientAuth
  1958. (
  1959.   NSSTrustDomain *td,
  1960.   NSSUTF8 *sslHostOpt,
  1961.   NSSDER *rootCAsOpt[], /* null pointer for none */
  1962.   PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
  1963.   NSSAlgorithmAndParameters *apOpt,
  1964.   NSSPolicies *policiesOpt,
  1965.   NSSCertificate **rvOpt,
  1966.   PRUint32 rvLimit, /* zero for no limit */
  1967.   NSSArena *arenaOpt
  1968. );
  1969.  
  1970. /*
  1971.  * NSSTrustDomain_FindBestUserCertificateForEmailSigning
  1972.  *
  1973.  */
  1974.  
  1975. NSS_EXTERN NSSCertificate *
  1976. NSSTrustDomain_FindBestUserCertificateForEmailSigning
  1977. (
  1978.   NSSTrustDomain *td,
  1979.   NSSASCII7 *signerOpt,
  1980.   NSSASCII7 *recipientOpt,
  1981.   /* anything more here? */
  1982.   NSSAlgorithmAndParameters *apOpt,
  1983.   NSSPolicies *policiesOpt
  1984. );
  1985.  
  1986. /*
  1987.  * NSSTrustDomain_FindUserCertificatesForEmailSigning
  1988.  *
  1989.  */
  1990.  
  1991. NSS_EXTERN NSSCertificate **
  1992. NSSTrustDomain_FindUserCertificatesForEmailSigning
  1993. (
  1994.   NSSTrustDomain *td,
  1995.   NSSASCII7 *signerOpt,
  1996.   NSSASCII7 *recipientOpt,
  1997.   /* anything more here? */
  1998.   NSSAlgorithmAndParameters *apOpt,
  1999.   NSSPolicies *policiesOpt,
  2000.   NSSCertificate **rvOpt,
  2001.   PRUint32 rvLimit, /* zero for no limit */
  2002.   NSSArena *arenaOpt
  2003. );
  2004.  
  2005. /*
  2006.  * Here is where we'd add more Find[Best]UserCertificate[s]For<usage>
  2007.  * routines.
  2008.  */
  2009.  
  2010. /* Private Keys */
  2011.  
  2012. /*
  2013.  * NSSTrustDomain_GenerateKeyPair
  2014.  *
  2015.  * Creates persistant objects.  If you want session objects, use
  2016.  * NSSCryptoContext_GenerateKeyPair.  The destination token is where
  2017.  * the keys are stored.  If that token can do the required math, then
  2018.  * that's where the keys are generated too.  Otherwise, the keys are
  2019.  * generated elsewhere and moved to that token.
  2020.  */
  2021.  
  2022. NSS_EXTERN PRStatus
  2023. NSSTrustDomain_GenerateKeyPair
  2024. (
  2025.   NSSTrustDomain *td,
  2026.   NSSAlgorithmAndParameters *ap,
  2027.   NSSPrivateKey **pvkOpt,
  2028.   NSSPublicKey **pbkOpt,
  2029.   PRBool privateKeyIsSensitive,
  2030.   NSSToken *destination,
  2031.   NSSCallback *uhhOpt
  2032. );
  2033.  
  2034. /*
  2035.  * NSSTrustDomain_TraversePrivateKeys
  2036.  *
  2037.  * 
  2038.  * NSS_EXTERN PRStatus *
  2039.  * NSSTrustDomain_TraversePrivateKeys
  2040.  * (
  2041.  *   NSSTrustDomain *td,
  2042.  *   PRStatus (*callback)(NSSPrivateKey *vk, void *arg),
  2043.  *   void *arg
  2044.  * );
  2045.  */
  2046.  
  2047. /* Symmetric Keys */
  2048.  
  2049. /*
  2050.  * NSSTrustDomain_GenerateSymmetricKey
  2051.  *
  2052.  */
  2053.  
  2054. NSS_EXTERN NSSSymmetricKey *
  2055. NSSTrustDomain_GenerateSymmetricKey
  2056. (
  2057.   NSSTrustDomain *td,
  2058.   NSSAlgorithmAndParameters *ap,
  2059.   PRUint32 keysize,
  2060.   NSSToken *destination,
  2061.   NSSCallback *uhhOpt
  2062. );
  2063.  
  2064. /*
  2065.  * NSSTrustDomain_GenerateSymmetricKeyFromPassword
  2066.  *
  2067.  */
  2068.  
  2069. NSS_EXTERN NSSSymmetricKey *
  2070. NSSTrustDomain_GenerateSymmetricKeyFromPassword
  2071. (
  2072.   NSSTrustDomain *td,
  2073.   NSSAlgorithmAndParameters *ap,
  2074.   NSSUTF8 *passwordOpt, /* if null, prompt */
  2075.   NSSToken *destinationOpt,
  2076.   NSSCallback *uhhOpt
  2077. );
  2078.  
  2079. /*
  2080.  * NSSTrustDomain_FindSymmetricKeyByAlgorithm
  2081.  *
  2082.  * Is this still needed?
  2083.  * 
  2084.  * NSS_EXTERN NSSSymmetricKey *
  2085.  * NSSTrustDomain_FindSymmetricKeyByAlgorithm
  2086.  * (
  2087.  *   NSSTrustDomain *td,
  2088.  *   NSSOID *algorithm,
  2089.  *   NSSCallback *uhhOpt
  2090.  * );
  2091.  */
  2092.  
  2093. /*
  2094.  * NSSTrustDomain_FindSymmetricKeyByAlgorithmAndKeyID
  2095.  *
  2096.  */
  2097.  
  2098. NSS_EXTERN NSSSymmetricKey *
  2099. NSSTrustDomain_FindSymmetricKeyByAlgorithmAndKeyID
  2100. (
  2101.   NSSTrustDomain *td,
  2102.   NSSOID *algorithm,
  2103.   NSSItem *keyID,
  2104.   NSSCallback *uhhOpt
  2105. );
  2106.  
  2107. /*
  2108.  * NSSTrustDomain_TraverseSymmetricKeys
  2109.  *
  2110.  * 
  2111.  * NSS_EXTERN PRStatus *
  2112.  * NSSTrustDomain_TraverseSymmetricKeys
  2113.  * (
  2114.  *   NSSTrustDomain *td,
  2115.  *   PRStatus (*callback)(NSSSymmetricKey *mk, void *arg),
  2116.  *   void *arg
  2117.  * );
  2118.  */
  2119.  
  2120. /*
  2121.  * NSSTrustDomain_CreateCryptoContext
  2122.  *
  2123.  * If a callback object is specified, it becomes the for the crypto
  2124.  * context; otherwise, this trust domain's default (if any) is
  2125.  * inherited.
  2126.  */
  2127.  
  2128. NSS_EXTERN NSSCryptoContext *
  2129. NSSTrustDomain_CreateCryptoContext
  2130. (
  2131.   NSSTrustDomain *td,
  2132.   NSSCallback *uhhOpt
  2133. );
  2134.  
  2135. /*
  2136.  * NSSTrustDomain_CreateCryptoContextForAlgorithm
  2137.  *
  2138.  */
  2139.  
  2140. NSS_EXTERN NSSCryptoContext *
  2141. NSSTrustDomain_CreateCryptoContextForAlgorithm
  2142. (
  2143.   NSSTrustDomain *td,
  2144.   NSSOID *algorithm
  2145. );
  2146.  
  2147. /*
  2148.  * NSSTrustDomain_CreateCryptoContextForAlgorithmAndParameters
  2149.  *
  2150.  */
  2151.  
  2152. NSS_EXTERN NSSCryptoContext *
  2153. NSSTrustDomain_CreateCryptoContextForAlgorithmAndParameters
  2154. (
  2155.   NSSTrustDomain *td,
  2156.   NSSAlgorithmAndParameters *ap
  2157. );
  2158.  
  2159. /* find/traverse other objects, e.g. s/mime profiles */
  2160.  
  2161. /*
  2162.  * NSSCryptoContext
  2163.  *
  2164.  * A crypto context is sort of a short-term snapshot of a trust domain,
  2165.  * used for the life of "one crypto operation."  You can also think of
  2166.  * it as a "temporary database."
  2167.  * 
  2168.  * Just about all of the things you can do with a trust domain -- importing
  2169.  * or creating certs, keys, etc. -- can be done with a crypto context.
  2170.  * The difference is that the objects will be temporary ("session") objects.
  2171.  * 
  2172.  * Also, if the context was created for a key, cert, and/or algorithm; or
  2173.  * if such objects have been "associated" with the context, then the context
  2174.  * can do everything the keys can, like crypto operations.
  2175.  * 
  2176.  * And finally, because it keeps the state of the crypto operations, it
  2177.  * can do streaming crypto ops.
  2178.  */
  2179.  
  2180. /*
  2181.  * NSSTrustDomain_Destroy
  2182.  *
  2183.  */
  2184.  
  2185. NSS_EXTERN PRStatus
  2186. NSSCryptoContext_Destroy
  2187. (
  2188.   NSSCryptoContext *cc
  2189. );
  2190.  
  2191. /* establishing a default callback */
  2192.  
  2193. /*
  2194.  * NSSCryptoContext_SetDefaultCallback
  2195.  *
  2196.  */
  2197.  
  2198. NSS_EXTERN PRStatus
  2199. NSSCryptoContext_SetDefaultCallback
  2200. (
  2201.   NSSCryptoContext *cc,
  2202.   NSSCallback *newCallback,
  2203.   NSSCallback **oldCallbackOpt
  2204. );
  2205.  
  2206. /*
  2207.  * NSSCryptoContext_GetDefaultCallback
  2208.  *
  2209.  */
  2210.  
  2211. NSS_EXTERN NSSCallback *
  2212. NSSCryptoContext_GetDefaultCallback
  2213. (
  2214.   NSSCryptoContext *cc,
  2215.   PRStatus *statusOpt
  2216. );
  2217.  
  2218. /*
  2219.  * NSSCryptoContext_GetTrustDomain
  2220.  *
  2221.  */
  2222.  
  2223. NSS_EXTERN NSSTrustDomain *
  2224. NSSCryptoContext_GetTrustDomain
  2225. (
  2226.   NSSCryptoContext *cc
  2227. );
  2228.  
  2229. /* AddModule, etc: should we allow "temporary" changes here? */
  2230. /* DisableToken, etc: ditto */
  2231. /* Ordering of tokens? */
  2232. /* Finding slots+token etc. */
  2233. /* login+logout */
  2234.  
  2235. /* Importing things */
  2236.  
  2237. /*
  2238.  * NSSCryptoContext_ImportCertificate
  2239.  *
  2240.  * If there's not a "distinguished certificate" for this context, this
  2241.  * sets the specified one to be it.
  2242.  */
  2243.  
  2244. NSS_EXTERN PRStatus
  2245. NSSCryptoContext_ImportCertificate
  2246. (
  2247.   NSSCryptoContext *cc,
  2248.   NSSCertificate *c
  2249. );
  2250.  
  2251. /*
  2252.  * NSSCryptoContext_ImportPKIXCertificate
  2253.  *
  2254.  */
  2255.  
  2256. NSS_EXTERN NSSCertificate *
  2257. NSSCryptoContext_ImportPKIXCertificate
  2258. (
  2259.   NSSCryptoContext *cc,
  2260.   struct NSSPKIXCertificateStr *pc
  2261. );
  2262.  
  2263. /*
  2264.  * NSSCryptoContext_ImportEncodedCertificate
  2265.  *
  2266.  */
  2267.  
  2268. NSS_EXTERN NSSCertificate *
  2269. NSSCryptoContext_ImportEncodedCertificate
  2270. (
  2271.   NSSCryptoContext *cc,
  2272.   NSSBER *ber
  2273. );
  2274.  
  2275. /*
  2276.  * NSSCryptoContext_ImportEncodedPKIXCertificateChain
  2277.  *
  2278.  */
  2279.  
  2280. NSS_EXTERN PRStatus
  2281. NSSCryptoContext_ImportEncodedPKIXCertificateChain
  2282. (
  2283.   NSSCryptoContext *cc,
  2284.   NSSBER *ber
  2285. );
  2286.  
  2287. /* Other importations: S/MIME capabilities
  2288.  */
  2289.  
  2290. /*
  2291.  * NSSCryptoContext_FindBestCertificateByNickname
  2292.  *
  2293.  */
  2294.  
  2295. NSS_EXTERN NSSCertificate *
  2296. NSSCryptoContext_FindBestCertificateByNickname
  2297. (
  2298.   NSSCryptoContext *cc,
  2299.   NSSUTF8 *name,
  2300.   NSSTime *timeOpt, /* NULL for "now" */
  2301.   NSSUsage *usage,
  2302.   NSSPolicies *policiesOpt /* NULL for none */
  2303. );
  2304.  
  2305. /*
  2306.  * NSSCryptoContext_FindCertificatesByNickname
  2307.  *
  2308.  */
  2309.  
  2310. NSS_EXTERN NSSCertificate **
  2311. NSSCryptoContext_FindCertificatesByNickname
  2312. (
  2313.   NSSCryptoContext *cc,
  2314.   NSSUTF8 *name,
  2315.   NSSCertificate *rvOpt[],
  2316.   PRUint32 maximumOpt, /* 0 for no max */
  2317.   NSSArena *arenaOpt
  2318. );
  2319.  
  2320. /*
  2321.  * NSSCryptoContext_FindCertificateByIssuerAndSerialNumber
  2322.  *
  2323.  */
  2324.  
  2325. NSS_EXTERN NSSCertificate *
  2326. NSSCryptoContext_FindCertificateByIssuerAndSerialNumber
  2327. (
  2328.   NSSCryptoContext *cc,
  2329.   NSSDER *issuer,
  2330.   NSSDER *serialNumber
  2331. );
  2332.  
  2333. /*
  2334.  * NSSCryptoContext_FindBestCertificateBySubject
  2335.  *
  2336.  * This does not search through alternate names hidden in extensions.
  2337.  */
  2338.  
  2339. NSS_EXTERN NSSCertificate *
  2340. NSSCryptoContext_FindBestCertificateBySubject
  2341. (
  2342.   NSSCryptoContext *cc,
  2343.   NSSDER /*NSSUTF8*/ *subject,
  2344.   NSSTime *timeOpt,
  2345.   NSSUsage *usage,
  2346.   NSSPolicies *policiesOpt
  2347. );
  2348.  
  2349. /*
  2350.  * NSSCryptoContext_FindCertificatesBySubject
  2351.  *
  2352.  * This does not search through alternate names hidden in extensions.
  2353.  */
  2354.  
  2355. NSS_EXTERN NSSCertificate **
  2356. NSSCryptoContext_FindCertificatesBySubject
  2357. (
  2358.   NSSCryptoContext *cc,
  2359.   NSSDER /*NSSUTF8*/ *subject,
  2360.   NSSCertificate *rvOpt[],
  2361.   PRUint32 maximumOpt, /* 0 for no max */
  2362.   NSSArena *arenaOpt
  2363. );
  2364.  
  2365. /*
  2366.  * NSSCryptoContext_FindBestCertificateByNameComponents
  2367.  *
  2368.  * This call does try several tricks, including a pseudo pkcs#11 
  2369.  * attribute for the ldap module to try as a query.  Eventually
  2370.  * this call falls back to a traversal if that's what's required.
  2371.  * It will search through alternate names hidden in extensions.
  2372.  */
  2373.  
  2374. NSS_EXTERN NSSCertificate *
  2375. NSSCryptoContext_FindBestCertificateByNameComponents
  2376. (
  2377.   NSSCryptoContext *cc,
  2378.   NSSUTF8 *nameComponents,
  2379.   NSSTime *timeOpt,
  2380.   NSSUsage *usage,
  2381.   NSSPolicies *policiesOpt
  2382. );
  2383.  
  2384. /*
  2385.  * NSSCryptoContext_FindCertificatesByNameComponents
  2386.  *
  2387.  * This call, too, tries several tricks.  It will stop on the first
  2388.  * attempt that generates results, so it won't e.g. traverse the
  2389.  * entire ldap database.
  2390.  */
  2391.  
  2392. NSS_EXTERN NSSCertificate **
  2393. NSSCryptoContext_FindCertificatesByNameComponents
  2394. (
  2395.   NSSCryptoContext *cc,
  2396.   NSSUTF8 *nameComponents,
  2397.   NSSCertificate *rvOpt[],
  2398.   PRUint32 maximumOpt, /* 0 for no max */
  2399.   NSSArena *arenaOpt
  2400. );
  2401.  
  2402. /*
  2403.  * NSSCryptoContext_FindCertificateByEncodedCertificate
  2404.  *
  2405.  */
  2406.  
  2407. NSS_EXTERN NSSCertificate *
  2408. NSSCryptoContext_FindCertificateByEncodedCertificate
  2409. (
  2410.   NSSCryptoContext *cc,
  2411.   NSSBER *encodedCertificate
  2412. );
  2413.  
  2414. /*
  2415.  * NSSCryptoContext_FindBestCertificateByEmail
  2416.  *
  2417.  */
  2418.  
  2419. NSS_EXTERN NSSCertificate *
  2420. NSSCryptoContext_FindBestCertificateByEmail
  2421. (
  2422.   NSSCryptoContext *cc,
  2423.   NSSASCII7 *email,
  2424.   NSSTime *timeOpt,
  2425.   NSSUsage *usage,
  2426.   NSSPolicies *policiesOpt
  2427. );
  2428.  
  2429. /*
  2430.  * NSSCryptoContext_FindCertificatesByEmail
  2431.  *
  2432.  */
  2433.  
  2434. NSS_EXTERN NSSCertificate **
  2435. NSSCryptoContext_FindCertificatesByEmail
  2436. (
  2437.   NSSCryptoContext *cc,
  2438.   NSSASCII7 *email,
  2439.   NSSCertificate *rvOpt[],
  2440.   PRUint32 maximumOpt, /* 0 for no max */
  2441.   NSSArena *arenaOpt
  2442. );
  2443.  
  2444. /*
  2445.  * NSSCryptoContext_FindCertificateByOCSPHash
  2446.  *
  2447.  */
  2448.  
  2449. NSS_EXTERN NSSCertificate *
  2450. NSSCryptoContext_FindCertificateByOCSPHash
  2451. (
  2452.   NSSCryptoContext *cc,
  2453.   NSSItem *hash
  2454. );
  2455.  
  2456. /*
  2457.  * NSSCryptoContext_TraverseCertificates
  2458.  *
  2459.  * 
  2460.  * NSS_EXTERN PRStatus *
  2461.  * NSSCryptoContext_TraverseCertificates
  2462.  * (
  2463.  *   NSSCryptoContext *cc,
  2464.  *   PRStatus (*callback)(NSSCertificate *c, void *arg),
  2465.  *   void *arg
  2466.  * );
  2467.  */
  2468.  
  2469. /*
  2470.  * NSSCryptoContext_FindBestUserCertificate
  2471.  *
  2472.  */
  2473.  
  2474. NSS_EXTERN NSSCertificate *
  2475. NSSCryptoContext_FindBestUserCertificate
  2476. (
  2477.   NSSCryptoContext *cc,
  2478.   NSSTime *timeOpt,
  2479.   NSSUsage *usage,
  2480.   NSSPolicies *policiesOpt
  2481. );
  2482.  
  2483. /*
  2484.  * NSSCryptoContext_FindUserCertificates
  2485.  *
  2486.  */
  2487.  
  2488. NSS_EXTERN NSSCertificate **
  2489. NSSCryptoContext_FindUserCertificates
  2490. (
  2491.   NSSCryptoContext *cc,
  2492.   NSSTime *timeOpt,
  2493.   NSSUsage *usageOpt,
  2494.   NSSPolicies *policiesOpt,
  2495.   NSSCertificate **rvOpt,
  2496.   PRUint32 rvLimit, /* zero for no limit */
  2497.   NSSArena *arenaOpt
  2498. );
  2499.  
  2500. /*
  2501.  * NSSCryptoContext_FindBestUserCertificateForSSLClientAuth
  2502.  *
  2503.  */
  2504.  
  2505. NSS_EXTERN NSSCertificate *
  2506. NSSCryptoContext_FindBestUserCertificateForSSLClientAuth
  2507. (
  2508.   NSSCryptoContext *cc,
  2509.   NSSUTF8 *sslHostOpt,
  2510.   NSSDER *rootCAsOpt[], /* null pointer for none */
  2511.   PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
  2512.   NSSAlgorithmAndParameters *apOpt,
  2513.   NSSPolicies *policiesOpt
  2514. );
  2515.  
  2516. /*
  2517.  * NSSCryptoContext_FindUserCertificatesForSSLClientAuth
  2518.  *
  2519.  */
  2520.  
  2521. NSS_EXTERN NSSCertificate **
  2522. NSSCryptoContext_FindUserCertificatesForSSLClientAuth
  2523. (
  2524.   NSSCryptoContext *cc,
  2525.   NSSUTF8 *sslHostOpt,
  2526.   NSSDER *rootCAsOpt[], /* null pointer for none */
  2527.   PRUint32 rootCAsMaxOpt, /* zero means list is null-terminated */
  2528.   NSSAlgorithmAndParameters *apOpt,
  2529.   NSSPolicies *policiesOpt,
  2530.   NSSCertificate **rvOpt,
  2531.   PRUint32 rvLimit, /* zero for no limit */
  2532.   NSSArena *arenaOpt
  2533. );
  2534.  
  2535. /*
  2536.  * NSSCryptoContext_FindBestUserCertificateForEmailSigning
  2537.  *
  2538.  */
  2539.  
  2540. NSS_EXTERN NSSCertificate *
  2541. NSSCryptoContext_FindBestUserCertificateForEmailSigning
  2542. (
  2543.   NSSCryptoContext *cc,
  2544.   NSSASCII7 *signerOpt,
  2545.   NSSASCII7 *recipientOpt,
  2546.   /* anything more here? */
  2547.   NSSAlgorithmAndParameters *apOpt,
  2548.   NSSPolicies *policiesOpt
  2549. );
  2550.  
  2551. /*
  2552.  * NSSCryptoContext_FindUserCertificatesForEmailSigning
  2553.  *
  2554.  */
  2555.  
  2556. NSS_EXTERN NSSCertificate *
  2557. NSSCryptoContext_FindUserCertificatesForEmailSigning
  2558. (
  2559.   NSSCryptoContext *cc,
  2560.   NSSASCII7 *signerOpt, /* fgmr or a more general name? */
  2561.   NSSASCII7 *recipientOpt,
  2562.   /* anything more here? */
  2563.   NSSAlgorithmAndParameters *apOpt,
  2564.   NSSPolicies *policiesOpt,
  2565.   NSSCertificate **rvOpt,
  2566.   PRUint32 rvLimit, /* zero for no limit */
  2567.   NSSArena *arenaOpt
  2568. );
  2569.  
  2570. /* Private Keys */
  2571.  
  2572. /*
  2573.  * NSSCryptoContext_GenerateKeyPair
  2574.  *
  2575.  * Creates session objects.  If you want persistant objects, use
  2576.  * NSSTrustDomain_GenerateKeyPair.  The destination token is where
  2577.  * the keys are stored.  If that token can do the required math, then
  2578.  * that's where the keys are generated too.  Otherwise, the keys are
  2579.  * generated elsewhere and moved to that token.
  2580.  */
  2581.  
  2582. NSS_EXTERN PRStatus
  2583. NSSCryptoContext_GenerateKeyPair
  2584. (
  2585.   NSSCryptoContext *cc,
  2586.   NSSAlgorithmAndParameters *ap,
  2587.   NSSPrivateKey **pvkOpt,
  2588.   NSSPublicKey **pbkOpt,
  2589.   PRBool privateKeyIsSensitive,
  2590.   NSSToken *destination,
  2591.   NSSCallback *uhhOpt
  2592. );
  2593.  
  2594. /*
  2595.  * NSSCryptoContext_TraversePrivateKeys
  2596.  *
  2597.  * 
  2598.  * NSS_EXTERN PRStatus *
  2599.  * NSSCryptoContext_TraversePrivateKeys
  2600.  * (
  2601.  *   NSSCryptoContext *cc,
  2602.  *   PRStatus (*callback)(NSSPrivateKey *vk, void *arg),
  2603.  *   void *arg
  2604.  * );
  2605.  */
  2606.  
  2607. /* Symmetric Keys */
  2608.  
  2609. /*
  2610.  * NSSCryptoContext_GenerateSymmetricKey
  2611.  *
  2612.  */
  2613.  
  2614. NSS_EXTERN NSSSymmetricKey *
  2615. NSSCryptoContext_GenerateSymmetricKey
  2616. (
  2617.   NSSCryptoContext *cc,
  2618.   NSSAlgorithmAndParameters *ap,
  2619.   PRUint32 keysize,
  2620.   NSSToken *destination,
  2621.   NSSCallback *uhhOpt
  2622. );
  2623.  
  2624. /*
  2625.  * NSSCryptoContext_GenerateSymmetricKeyFromPassword
  2626.  *
  2627.  */
  2628.  
  2629. NSS_EXTERN NSSSymmetricKey *
  2630. NSSCryptoContext_GenerateSymmetricKeyFromPassword
  2631. (
  2632.   NSSCryptoContext *cc,
  2633.   NSSAlgorithmAndParameters *ap,
  2634.   NSSUTF8 *passwordOpt, /* if null, prompt */
  2635.   NSSToken *destinationOpt,
  2636.   NSSCallback *uhhOpt
  2637. );
  2638.  
  2639. /*
  2640.  * NSSCryptoContext_FindSymmetricKeyByAlgorithm
  2641.  *
  2642.  * 
  2643.  * NSS_EXTERN NSSSymmetricKey *
  2644.  * NSSCryptoContext_FindSymmetricKeyByType
  2645.  * (
  2646.  *   NSSCryptoContext *cc,
  2647.  *   NSSOID *type,
  2648.  *   NSSCallback *uhhOpt
  2649.  * );
  2650.  */
  2651.  
  2652. /*
  2653.  * NSSCryptoContext_FindSymmetricKeyByAlgorithmAndKeyID
  2654.  *
  2655.  */
  2656.  
  2657. NSS_EXTERN NSSSymmetricKey *
  2658. NSSCryptoContext_FindSymmetricKeyByAlgorithmAndKeyID
  2659. (
  2660.   NSSCryptoContext *cc,
  2661.   NSSOID *algorithm,
  2662.   NSSItem *keyID,
  2663.   NSSCallback *uhhOpt
  2664. );
  2665.  
  2666. /*
  2667.  * NSSCryptoContext_TraverseSymmetricKeys
  2668.  *
  2669.  * 
  2670.  * NSS_EXTERN PRStatus *
  2671.  * NSSCryptoContext_TraverseSymmetricKeys
  2672.  * (
  2673.  *   NSSCryptoContext *cc,
  2674.  *   PRStatus (*callback)(NSSSymmetricKey *mk, void *arg),
  2675.  *   void *arg
  2676.  * );
  2677.  */
  2678.  
  2679. /* Crypto ops on distinguished keys */
  2680.  
  2681. /*
  2682.  * NSSCryptoContext_Decrypt
  2683.  *
  2684.  */
  2685.  
  2686. NSS_EXTERN NSSItem *
  2687. NSSCryptoContext_Decrypt
  2688. (
  2689.   NSSCryptoContext *cc,
  2690.   NSSAlgorithmAndParameters *apOpt,
  2691.   NSSItem *encryptedData,
  2692.   NSSCallback *uhhOpt,
  2693.   NSSItem *rvOpt,
  2694.   NSSArena *arenaOpt
  2695. );
  2696.  
  2697. /*
  2698.  * NSSCryptoContext_BeginDecrypt
  2699.  *
  2700.  */
  2701.  
  2702. NSS_EXTERN PRStatus
  2703. NSSCryptoContext_BeginDecrypt
  2704. (
  2705.   NSSCryptoContext *cc,
  2706.   NSSAlgorithmAndParameters *apOpt,
  2707.   NSSCallback *uhhOpt
  2708. );
  2709.  
  2710. /*
  2711.  * NSSCryptoContext_ContinueDecrypt
  2712.  *
  2713.  */
  2714.  
  2715. /*
  2716.  * NSSItem semantics:
  2717.  *
  2718.  *   If rvOpt is NULL, a new NSSItem and buffer are allocated.
  2719.  *   If rvOpt is not null, but the buffer pointer is null,
  2720.  *     then rvOpt is returned but a new buffer is allocated.
  2721.  *     In this case, if the length value is not zero, then
  2722.  *     no more than that much space will be allocated.
  2723.  *   If rvOpt is not null and the buffer pointer is not null,
  2724.  *     then that buffer is re-used.  No more than the buffer
  2725.  *     length value will be used; if it's not enough, an
  2726.  *     error is returned.  If less is used, the number is
  2727.  *     adjusted downwards.
  2728.  *
  2729.  *  Note that although this is short of some ideal "Item"
  2730.  *  definition, we can usually tell how big these buffers
  2731.  *  have to be.
  2732.  *
  2733.  *  Feedback is requested; and earlier is better than later.
  2734.  */
  2735.  
  2736. NSS_EXTERN NSSItem *
  2737. NSSCryptoContext_ContinueDecrypt
  2738. (
  2739.   NSSCryptoContext *cc,
  2740.   NSSItem *data,
  2741.   NSSItem *rvOpt,
  2742.   NSSArena *arenaOpt
  2743. );
  2744.  
  2745. /*
  2746.  * NSSCryptoContext_FinishDecrypt
  2747.  *
  2748.  */
  2749.  
  2750. NSS_EXTERN NSSItem *
  2751. NSSCryptoContext_FinishDecrypt
  2752. (
  2753.   NSSCryptoContext *cc,
  2754.   NSSItem *rvOpt,
  2755.   NSSArena *arenaOpt
  2756. );
  2757.  
  2758. /*
  2759.  * NSSCryptoContext_Sign
  2760.  *
  2761.  */
  2762.  
  2763. NSS_EXTERN NSSItem *
  2764. NSSCryptoContext_Sign
  2765. (
  2766.   NSSCryptoContext *cc,
  2767.   NSSAlgorithmAndParameters *apOpt,
  2768.   NSSItem *data,
  2769.   NSSCallback *uhhOpt,
  2770.   NSSItem *rvOpt,
  2771.   NSSArena *arenaOpt
  2772. );
  2773.  
  2774. /*
  2775.  * NSSCryptoContext_BeginSign
  2776.  *
  2777.  */
  2778.  
  2779. NSS_EXTERN PRStatus
  2780. NSSCryptoContext_BeginSign
  2781. (
  2782.   NSSCryptoContext *cc,
  2783.   NSSAlgorithmAndParameters *apOpt,
  2784.   NSSCallback *uhhOpt
  2785. );
  2786.  
  2787. /*
  2788.  * NSSCryptoContext_ContinueSign
  2789.  *
  2790.  */
  2791.  
  2792. NSS_EXTERN PRStatus
  2793. NSSCryptoContext_ContinueSign
  2794. (
  2795.   NSSCryptoContext *cc,
  2796.   NSSItem *data
  2797. );
  2798.  
  2799. /*
  2800.  * NSSCryptoContext_FinishSign
  2801.  *
  2802.  */
  2803.  
  2804. NSS_EXTERN NSSItem *
  2805. NSSCryptoContext_FinishSign
  2806. (
  2807.   NSSCryptoContext *cc,
  2808.   NSSItem *rvOpt,
  2809.   NSSArena *arenaOpt
  2810. );
  2811.  
  2812. /*
  2813.  * NSSCryptoContext_SignRecover
  2814.  *
  2815.  */
  2816.  
  2817. NSS_EXTERN NSSItem *
  2818. NSSCryptoContext_SignRecover
  2819. (
  2820.   NSSCryptoContext *cc,
  2821.   NSSAlgorithmAndParameters *apOpt,
  2822.   NSSItem *data,
  2823.   NSSCallback *uhhOpt,
  2824.   NSSItem *rvOpt,
  2825.   NSSArena *arenaOpt
  2826. );
  2827.  
  2828. /*
  2829.  * NSSCryptoContext_BeginSignRecover
  2830.  *
  2831.  */
  2832.  
  2833. NSS_EXTERN PRStatus
  2834. NSSCryptoContext_BeginSignRecover
  2835. (
  2836.   NSSCryptoContext *cc,
  2837.   NSSAlgorithmAndParameters *apOpt,
  2838.   NSSCallback *uhhOpt
  2839. );
  2840.  
  2841. /*
  2842.  * NSSCryptoContext_ContinueSignRecover
  2843.  *
  2844.  */
  2845.  
  2846. NSS_EXTERN NSSItem *
  2847. NSSCryptoContext_ContinueSignRecover
  2848. (
  2849.   NSSCryptoContext *cc,
  2850.   NSSItem *data,
  2851.   NSSItem *rvOpt,
  2852.   NSSArena *arenaOpt
  2853. );
  2854.  
  2855. /*
  2856.  * NSSCryptoContext_FinishSignRecover
  2857.  *
  2858.  */
  2859.  
  2860. NSS_EXTERN NSSItem *
  2861. NSSCryptoContext_FinishSignRecover
  2862. (
  2863.   NSSCryptoContext *cc,
  2864.   NSSItem *rvOpt,
  2865.   NSSArena *arenaOpt
  2866. );
  2867.  
  2868. /*
  2869.  * NSSCryptoContext_UnwrapSymmetricKey
  2870.  *
  2871.  */
  2872.  
  2873. NSS_EXTERN NSSSymmetricKey *
  2874. NSSCryptoContext_UnwrapSymmetricKey
  2875. (
  2876.   NSSCryptoContext *cc,
  2877.   NSSAlgorithmAndParameters *apOpt,
  2878.   NSSItem *wrappedKey,
  2879.   NSSCallback *uhhOpt
  2880. );
  2881.  
  2882. /*
  2883.  * NSSCryptoContext_DeriveSymmetricKey
  2884.  *
  2885.  */
  2886.  
  2887. NSS_EXTERN NSSSymmetricKey *
  2888. NSSCryptoContext_DeriveSymmetricKey
  2889. (
  2890.   NSSCryptoContext *cc,
  2891.   NSSPublicKey *bk,
  2892.   NSSAlgorithmAndParameters *apOpt,
  2893.   NSSOID *target,
  2894.   PRUint32 keySizeOpt, /* zero for best allowed */
  2895.   NSSOperations operations,
  2896.   NSSCallback *uhhOpt
  2897. );
  2898.  
  2899. /*
  2900.  * NSSCryptoContext_Encrypt
  2901.  *
  2902.  * Encrypt a single chunk of data with the distinguished public key
  2903.  * of this crypto context.
  2904.  */
  2905.  
  2906. NSS_EXTERN NSSItem *
  2907. NSSCryptoContext_Encrypt
  2908. (
  2909.   NSSCryptoContext *cc,
  2910.   NSSAlgorithmAndParameters *apOpt,
  2911.   NSSItem *data,
  2912.   NSSCallback *uhhOpt,
  2913.   NSSItem *rvOpt,
  2914.   NSSArena *arenaOpt
  2915. );
  2916.  
  2917. /*
  2918.  * NSSCryptoContext_BeginEncrypt
  2919.  *
  2920.  */
  2921.  
  2922. NSS_EXTERN PRStatus
  2923. NSSCryptoContext_BeginEncrypt
  2924. (
  2925.   NSSCryptoContext *cc,
  2926.   NSSAlgorithmAndParameters *apOpt,
  2927.   NSSCallback *uhhOpt
  2928. );
  2929.  
  2930. /*
  2931.  * NSSCryptoContext_ContinueEncrypt
  2932.  *
  2933.  */
  2934.  
  2935. NSS_EXTERN NSSItem *
  2936. NSSCryptoContext_ContinueEncrypt
  2937. (
  2938.   NSSCryptoContext *cc,
  2939.   NSSItem *data,
  2940.   NSSItem *rvOpt,
  2941.   NSSArena *arenaOpt
  2942. );
  2943.  
  2944. /*
  2945.  * NSSCryptoContext_FinishEncrypt
  2946.  *
  2947.  */
  2948.  
  2949. NSS_EXTERN NSSItem *
  2950. NSSCryptoContext_FinishEncrypt
  2951. (
  2952.   NSSCryptoContext *cc,
  2953.   NSSItem *rvOpt,
  2954.   NSSArena *arenaOpt
  2955. );
  2956.  
  2957. /*
  2958.  * NSSCryptoContext_Verify
  2959.  *
  2960.  */
  2961.  
  2962. NSS_EXTERN PRStatus
  2963. NSSCryptoContext_Verify
  2964. (
  2965.   NSSCryptoContext *cc,
  2966.   NSSAlgorithmAndParameters *apOpt,
  2967.   NSSItem *data,
  2968.   NSSItem *signature,
  2969.   NSSCallback *uhhOpt
  2970. );
  2971.  
  2972. /*
  2973.  * NSSCryptoContext_BeginVerify
  2974.  *
  2975.  */
  2976.  
  2977. NSS_EXTERN PRStatus
  2978. NSSCryptoContext_BeginVerify
  2979. (
  2980.   NSSCryptoContext *cc,
  2981.   NSSAlgorithmAndParameters *apOpt,
  2982.   NSSItem *signature,
  2983.   NSSCallback *uhhOpt
  2984. );
  2985.  
  2986. /*
  2987.  * NSSCryptoContext_ContinueVerify
  2988.  *
  2989.  */
  2990.  
  2991. NSS_EXTERN PRStatus
  2992. NSSCryptoContext_ContinueVerify
  2993. (
  2994.   NSSCryptoContext *cc,
  2995.   NSSItem *data
  2996. );
  2997.  
  2998. /*
  2999.  * NSSCryptoContext_FinishVerify
  3000.  *
  3001.  */
  3002.  
  3003. NSS_EXTERN PRStatus
  3004. NSSCryptoContext_FinishVerify
  3005. (
  3006.   NSSCryptoContext *cc
  3007. );
  3008.  
  3009. /*
  3010.  * NSSCryptoContext_VerifyRecover
  3011.  *
  3012.  */
  3013.  
  3014. NSS_EXTERN NSSItem *
  3015. NSSCryptoContext_VerifyRecover
  3016. (
  3017.   NSSCryptoContext *cc,
  3018.   NSSAlgorithmAndParameters *apOpt,
  3019.   NSSItem *signature,
  3020.   NSSCallback *uhhOpt,
  3021.   NSSItem *rvOpt,
  3022.   NSSArena *arenaOpt
  3023. );
  3024.  
  3025. /*
  3026.  * NSSCryptoContext_BeginVerifyRecover
  3027.  *
  3028.  */
  3029.  
  3030. NSS_EXTERN PRStatus
  3031. NSSCryptoContext_BeginVerifyRecover
  3032. (
  3033.   NSSCryptoContext *cc,
  3034.   NSSAlgorithmAndParameters *apOpt,
  3035.   NSSCallback *uhhOpt
  3036. );
  3037.  
  3038. /*
  3039.  * NSSCryptoContext_ContinueVerifyRecover
  3040.  *
  3041.  */
  3042.  
  3043. NSS_EXTERN NSSItem *
  3044. NSSCryptoContext_ContinueVerifyRecover
  3045. (
  3046.   NSSCryptoContext *cc,
  3047.   NSSItem *data,
  3048.   NSSItem *rvOpt,
  3049.   NSSArena *arenaOpt
  3050. );
  3051.  
  3052. /*
  3053.  * NSSCryptoContext_FinishVerifyRecover
  3054.  *
  3055.  */
  3056.  
  3057. NSS_EXTERN NSSItem *
  3058. NSSCryptoContext_FinishVerifyRecover
  3059. (
  3060.   NSSCryptoContext *cc,
  3061.   NSSItem *rvOpt,
  3062.   NSSArena *arenaOpt
  3063. );
  3064.  
  3065. /*
  3066.  * NSSCryptoContext_WrapSymmetricKey
  3067.  *
  3068.  */
  3069.  
  3070. NSS_EXTERN NSSItem *
  3071. NSSCryptoContext_WrapSymmetricKey
  3072. (
  3073.   NSSCryptoContext *cc,
  3074.   NSSAlgorithmAndParameters *apOpt,
  3075.   NSSSymmetricKey *keyToWrap,
  3076.   NSSCallback *uhhOpt,
  3077.   NSSItem *rvOpt,
  3078.   NSSArena *arenaOpt
  3079. );
  3080.  
  3081. /*
  3082.  * NSSCryptoContext_Digest
  3083.  *
  3084.  * Digest a single chunk of data with the distinguished digest key
  3085.  * of this crypto context.
  3086.  */
  3087.  
  3088. NSS_EXTERN NSSItem *
  3089. NSSCryptoContext_Digest
  3090. (
  3091.   NSSCryptoContext *cc,
  3092.   NSSAlgorithmAndParameters *apOpt,
  3093.   NSSItem *data,
  3094.   NSSCallback *uhhOpt,
  3095.   NSSItem *rvOpt,
  3096.   NSSArena *arenaOpt
  3097. );
  3098.  
  3099. /*
  3100.  * NSSCryptoContext_BeginDigest
  3101.  *
  3102.  */
  3103.  
  3104. NSS_EXTERN PRStatus
  3105. NSSCryptoContext_BeginDigest
  3106. (
  3107.   NSSCryptoContext *cc,
  3108.   NSSAlgorithmAndParameters *apOpt,
  3109.   NSSCallback *uhhOpt
  3110. );
  3111.  
  3112. /*
  3113.  * NSSCryptoContext_ContinueDigest
  3114.  *
  3115.  */
  3116.  
  3117. NSS_EXTERN PRStatus
  3118. NSSCryptoContext_ContinueDigest
  3119. (
  3120.   NSSCryptoContext *cc,
  3121.   NSSAlgorithmAndParameters *apOpt,
  3122.   NSSItem *item
  3123. );
  3124.  
  3125. /*
  3126.  * NSSCryptoContext_FinishDigest
  3127.  *
  3128.  */
  3129.  
  3130. NSS_EXTERN NSSItem *
  3131. NSSCryptoContext_FinishDigest
  3132. (
  3133.   NSSCryptoContext *cc,
  3134.   NSSItem *rvOpt,
  3135.   NSSArena *arenaOpt
  3136. );
  3137.  
  3138. /*
  3139.  * tbd: Combination ops
  3140.  */
  3141.  
  3142. /*
  3143.  * NSSCryptoContext_Clone
  3144.  *
  3145.  */
  3146.  
  3147. NSS_EXTERN NSSCryptoContext *
  3148. NSSCryptoContext_Clone
  3149. (
  3150.   NSSCryptoContext *cc
  3151. );
  3152.  
  3153. /*
  3154.  * NSSCryptoContext_Save
  3155.  * NSSCryptoContext_Restore
  3156.  *
  3157.  * We need to be able to save and restore the state of contexts.
  3158.  * Perhaps a mark-and-release mechanism would be better?
  3159.  */
  3160.  
  3161. /*
  3162.  * ..._SignTBSCertificate
  3163.  *
  3164.  * This requires feedback from the cert server team.
  3165.  */
  3166.  
  3167. /*
  3168.  * PRBool NSSCertificate_GetIsTrustedFor{xxx}(NSSCertificate *c);
  3169.  * PRStatus NSSCertificate_SetIsTrustedFor{xxx}(NSSCertificate *c, PRBool trusted);
  3170.  *
  3171.  * These will be helper functions which get the trust object for a cert,
  3172.  * and then call the corresponding function(s) on it.
  3173.  *
  3174.  * PKIX trust objects will have methods to manipulate the low-level trust
  3175.  * bits (which are based on key usage and extended key usage), and also the
  3176.  * conceptual high-level usages (e.g. ssl client auth, email encryption, etc.)
  3177.  *
  3178.  * Other types of trust objects (if any) might have different low-level
  3179.  * representations, but hopefully high-level concepts would map.
  3180.  *
  3181.  * Only these high-level general routines would be promoted to the
  3182.  * general certificate level here.  Hence the {xxx} above would be things
  3183.  * like "EmailSigning."
  3184.  *
  3185.  *
  3186.  * NSSPKIXTrust *NSSCertificate_GetPKIXTrustObject(NSSCertificate *c);
  3187.  * PRStatus NSSCertificate_SetPKIXTrustObject(NSSCertificate *c, NSPKIXTrust *t);
  3188.  *
  3189.  * I want to hold off on any general trust object until we've investigated
  3190.  * other models more thoroughly.
  3191.  */
  3192.  
  3193. PR_END_EXTERN_C
  3194.  
  3195. #endif /* NSSPKI_H */
  3196.